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