使用Maven安装本地jar
1.問(wèn)題與選擇
Maven是一種非常通用的工具,其可用的公共存儲(chǔ)庫(kù)首屈一指。 但是,總會(huì)有一個(gè)不在任何地方托管的工件,或者托管該工件的存儲(chǔ)庫(kù)有依賴的風(fēng)險(xiǎn),因?yàn)楫?dāng)您需要它時(shí),它可能不會(huì)啟動(dòng)。 發(fā)生這種情況時(shí),有幾種選擇:
- 硬著頭皮安裝完整的版本庫(kù)管理解決方案, 例如Nexus
- 嘗試將工件上傳到更知名的公共存儲(chǔ)庫(kù)之一
- 使用Maven插件在本地安裝工件
Nexus當(dāng)然是更成熟的解決方案,但也更復(fù)雜 。 設(shè)置一個(gè)實(shí)例來(lái)運(yùn)行Nexus,設(shè)置Nexus本身,配置和維護(hù)它對(duì)于使用單個(gè)jar這樣的簡(jiǎn)單問(wèn)題來(lái)說(shuō)可能是過(guò)大的。 但是,如果這種情況(托管自定義工件)很常見(jiàn),那么存儲(chǔ)庫(kù)管理器就很有意義。
將工件直接上傳到公共存儲(chǔ)庫(kù)或直接在Maven Central中也是一種很好的解決方案,但通常是一個(gè)漫長(zhǎng)的解決方案。 另外,該庫(kù)可能根本沒(méi)有啟用Maven,這使得處理過(guò)程變得更加困難,因此,現(xiàn)在就不能使用工件就不是一個(gè)現(xiàn)實(shí)的解決方案。 剩下的第三個(gè)選擇是在源代碼管理中添加工件,并使用maven插件。在這種情況下, maven-install-plugin可以在構(gòu)建過(guò)程需要它之前在本地安裝它 。 到目前為止,這是最簡(jiǎn)單,最可靠的選項(xiàng)。
2.使用
讓我們從將工件安裝到本地存儲(chǔ)庫(kù)所需的完整配置開(kāi)始:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifactId><version>2.4</version><configuration><groupId>org.somegroup</groupId><artifactId>someartifact</artifactId><version>1.0</version><packaging>jar</packaging><file>${basedir}/dependencies/someartifact-1.0.jar</file><generatePom>true</generatePom></configuration><executions><execution><id>install-jar-lib</id><goals><goal>install-file</goal></goals><phase>validate</phase></execution></executions> </plugin>現(xiàn)在,讓我們分解并分析此配置的詳細(xì)信息。
2.1。 工件信息
工件信息定義為<configuration>元素的一部分。 實(shí)際語(yǔ)法與聲明依賴項(xiàng)非常相似– groupId , artifactId和version元素。 配置的下一部分需要定義工件的包裝 -指定為jar 。 接下來(lái),我們需要使用Maven中提供的屬性提供要安裝的實(shí)際jar文件的位置 -這可以是絕對(duì)文件路徑,也可以是相對(duì)路徑。 在這種情況下, $ {basedir}屬性表示項(xiàng)目的根,即pom.xml文件所在的位置。 這意味著someartifact-1.0.jar文件需要放在根目錄下的/ dependencies /目錄中。 最后,還有一些其他可選詳細(xì)信息也可以配置。
2.2。 行刑
安裝文件目標(biāo)的執(zhí)行被綁定到標(biāo)準(zhǔn)Maven 構(gòu)建生命周期中的驗(yàn)證階段 。 這樣一來(lái),便可以在生命周期的開(kāi)始就安裝工件,而在下一個(gè)編譯階段才真正需要它。 一旦執(zhí)行了編譯階段, 便會(huì)將我們的artartifact-1.0.jar正確安裝在我們的本地存儲(chǔ)庫(kù)中,就像從Maven Central本身中檢索到的任何其他工件一樣。
2.3。 生成pom與提供pom
是否需要為工件提供pom.xml文件的問(wèn)題主要取決于工件本身的運(yùn)行時(shí)依賴性 。 簡(jiǎn)而言之,如果工件在其他jar上具有運(yùn)行時(shí)相關(guān)性,則這些jar也將需要在運(yùn)行時(shí)出現(xiàn)在類路徑上。 使用簡(jiǎn)單的工件應(yīng)該不會(huì)有問(wèn)題,因?yàn)樗谶\(yùn)行時(shí)可能沒(méi)有依賴關(guān)系(依賴關(guān)系圖中的葉子)。 安裝文件目標(biāo)中的generatePom選項(xiàng)應(yīng)足以滿足以下這些條件:
<generatePom>true</generatePom>但是,如果工件更加復(fù)雜并且確實(shí)具有非平凡的依賴關(guān)系 ,那么,如果這些依賴關(guān)系尚未在類路徑中,則必須添加它們。 一種方法是通過(guò)在項(xiàng)目的pom文件中手動(dòng)定義這些新的依賴項(xiàng)。 更好的解決方案是提供一個(gè)自定義pom.xml文件以及已安裝的工件:
<generatePom>false</generatePom> <pomFile>${basedir}/dependencies/someartifact-1.0.pom</pomFile>這將使Maven可以解析此自定義pom.xml中定義的工件的所有依賴關(guān)系,而不必在項(xiàng)目的主pom文件中手動(dòng)定義它們。
3.結(jié)論
本文通過(guò)使用maven-install-plugin在本地安裝jar,探討了如何使用不在Maven項(xiàng)目中任何地方托管的jar。
翻譯自: https://www.javacodegeeks.com/2013/04/install-local-jar-with-maven.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的使用Maven安装本地jar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 酒窝和梨涡哪个更珍贵更美(酒窝和梨涡的区
- 下一篇: 简单的Gradle Web应用程序