如何在項目的庫源代碼中直接添加本地jar文件(還沒有成爲Maven存儲庫的一部分)? html
您能夠像這樣直接添加本地依賴項(如在包含專有庫的build maven項目中提到的那樣): apache
<dependency> <groupId>com.sample</groupId> <artifactId>sample</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath> </dependency>
更新資料 maven
在新版本中,此功能被標記爲已棄用,但仍在工做而且還沒有刪除(您僅在maven啓動期間在日誌中看到警告)。 在Maven小組中,有關此https://issues.apache.org/jira/browse/MNG-6523的問題 (您能夠參與並描述此功能在某些狀況下有幫助的緣由)。 我但願此功能仍然存在! ide
若是您要的是我,只要不刪除該功能,就能夠使用它來僅依賴項目中一個調皮的jar文件 ,該文件不適合存儲庫。 若是此功能被刪除,那麼,這裏有不少好的答案,我之後能夠選擇! ui
首先,我想把這個答案歸功於一個匿名的Stack Overflow用戶-我很肯定我之前在這裏看到過相似的答案-但如今找不到了。 url
將本地JAR文件做爲依賴項的最佳選擇是建立本地Maven存儲庫。 這樣的存儲庫只不過是帶有pom文件的適當目錄結構。 spa
例如,個人主項目位於${master_project}
位置,subproject1位於${master_project}/${subproject1}
。 日誌
而後,我在${master_project}/local-maven-repo
建立一個Maven存儲庫。 code
在位於${master_project}/${subproject1}/pom.xml
subproject1中的pom文件中,須要指定存儲庫,該存儲庫將文件路徑做爲URL參數: xml
<repositories> <repository> <id>local-maven-repo</id> <url>file:///${project.parent.basedir}/local-maven-repo</url> </repository> </repositories>
能夠像其餘任何存儲庫同樣指定依賴項。 這使您的pom存儲庫獨立。 例如,一旦所需的JAR在Maven Central中可用,您只須要將其從本地存儲庫中刪除,它將從默認存儲庫中提取。
<dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.servicebinder</artifactId> <version>0.9.0-SNAPSHOT</version> </dependency>
最後但並不是最不重要的事情是使用-DlocalRepositoryPath開關將JAR文件添加到本地存儲庫,以下所示:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \ -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \ -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \ -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \ -DlocalRepositoryPath=${master_project}/local-maven-repo
安裝JAR文件後,便可將您的Maven存儲庫提交到代碼存儲庫,而且整個設置與系統無關。 ( GitHub中的工做示例 )。
我贊成讓JAR致力於源代碼倉庫不是一個好習慣,可是在現實生活中,快速而又骯髒的解決方案有時比功能強大的Nexus Repo託管一個沒法發佈的JAR更好。
也看看...
<scope>compile</scope>
Maven依賴 。 這是默認設置,但在某些狀況下,我發現還明確設置了該範圍,也使Maven能夠在本地存儲庫中查找本地庫。
請注意,使用本地存儲庫不必定是個好主意。 若是該項目與其餘人共享,那麼當它沒法正常工做時,其餘全部人都會有問題和疑問,即便您的源代碼控制系統中也沒法使用該jar!
儘管共享存儲庫是最好的答案,可是若是因爲某種緣由您不能執行此操做,則嵌入jar會比本地存儲庫更好。 僅本地回購內容可能會致使不少問題,尤爲是隨着時間的推移。
<dependency> <groupId>group id name</groupId> <artifactId>artifact name</artifactId> <version>version number</version> <scope>system</scope> <systemPath>jar location</systemPath> </dependency>