嵌入Maven
這是一個非常罕見的用例,但有時您需要它。 如何在應用程序中嵌入Maven,以便可以以編程方式運行目標?
簡短的答案是:這很棘手。 我涉足了我的java webapp自動同步項目的問題 ,有時我決定不嵌入它。 最終,我使用了可以滿足我需要的庫,但是無論如何,以下是可能有用的步驟和工具。
通常,嵌入式Maven需要的是在Maven項目中執行一些目標。 有兩種情況。
第一個是,如果您正在Maven容器中運行,即正在編寫Mojo /插件。 然后,這很容易,因為您可以通過已初始化的plexus容器管理所有內容。 在這種情況下,您可以使用mojo-executor 。 易于使用,但是需要一個“項目”,“ pluginManager”和“會話”,您無法輕松獲得它們。
第二種情況是完全嵌入的Maven。 有一個圖書館可以滿足我的需要(感謝MariuszS指出了這一點)–它是Maven Embedder 。 此SO問題中描述了它的用法。 使用第一個和第二個答案。
在找到該庫之前,我嘗試了另外兩個庫: jenkins maven Embedded和Maven Invoker 。 這兩個庫中的問題是:它們需要一個maven家。 即,maven安裝所在的路徑。 這有點與“嵌入式”專家的想法相反。 如果Maven Embedder適合您,則可以停止閱讀。 但是,在某些情況下,Maven Embedder可能不是您想要的。 在這種情況下,您應該使用上述兩個庫之一。 那么,如何找到并設置行家呢?
- 要求用戶指定它。 可能不太麻煩
- 使用M2_HOME。 其中一個庫默認情況下使用該庫,但問題是可能未設置它。 例如,我通常不設置它。 如果不是這樣,則可以退回到以前的方法
- 掃描整個文件系統以進行Maven安裝-聽起來不錯,并且只能執行一次,然后存儲在某個條目中。 問題是–可能沒有maven安裝。 即使是開發人員的機器,IDE(至少是Eclipse)都有一個“嵌入式”專家。 盡管它可能以手動安裝的相同格式將其存儲在內部某個位置,但它可能會根據版本而更改其路徑或結構。 當然,您可以不時地重新掃描文件樹以找到這樣的安裝
- 自己以編程方式下載Maven。 然后,您可以確定它的位置,并且始終將其以相同的格式放置在該位置。 這里的問題是版本不匹配–用戶可能正在使用其他版本的maven。 使版本可配置是一種選擇。
所有這些在某些情況下均有效,而在另一些情況下則無效。
因此,按照優先順序:
翻譯自: https://www.javacodegeeks.com/2013/11/embedding-maven.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 腾讯“QQ 群恢复”功能将于 10 月
- 下一篇: 余额宝建信养老飞月宝冻结怎么解冻?