簡體   English   中英

Maven安裝傳遞依賴項

[英]Maven install transitive dependencies

我有一個項目,我需要在Maven上安裝一個庫,以便我可以在所述項目上使用它。 我遇到的問題是所說的庫,比如說libA,它本身就有一個依賴,libB,它也是第三方的。

我已使用此代碼將兩者添加到本地存儲庫:

mvn install:install-file -Dfile=VerBDConverter.jar -DgroupId=verbdconverter
-DartifactId=verbdconverter -Dversion=1.00 -Dpackaging=jar -DgeneratePom=true  

對於lib 2也是如此。問題是,當我轉到我的項目的pom並為libA添加<dependency>時,Maven沒有選擇libB。

問題 :畢竟Maven應該得到libA的依賴,但事實並非如此。

畢竟,應該是Maven應該獲得libA的依賴,但事實並非如此。

不,在你的情況下,Maven不會明白libA需要哪些傳遞依賴,因為libA是手動安裝的,並且在任何地方都沒有libB的痕跡。

通常,傳遞依賴項是.pom文件的dependencies部分中定義的dependencies ,可作為已部署應用程序的一部分使用。 .pom文件本質上是原始pom.xml文件的副本,重命名以反映庫名稱(即artifactId-version.jar ,然后是artifactId-version.pom )。

在解析依賴關系時,maven還會檢查其.pom文件,並因此獲取有關其依賴關系的信息(這將成為傳遞依賴關系)並為其構建(和獲取)所需的依賴關系圖(即,重新迭代相同的進程每一個聲明的依賴)。

從官方Maven - 依賴機制介紹

通過從指定的遠程存儲庫讀取依賴項的項目文件 ,可以簡化此功能。 通常,這些項目的所有依賴項都在項目中使用,項目從其父項或其依賴項繼承的任何依賴項等都是如此。

注意:大膽是我的。 項目文件通常是pom.xml文件,一旦相關工件上傳到Maven存儲庫(或安裝到本地Maven緩存中),就會重命名為*.pom文件。


從你的問題,你用-DgeneratePom=true ,因此你沒有通過力霸” pom.xml文件,但一個新的自動生成

如果沒有通過參數pomFile提供, pomFile工件生成最小POM。 如果本地存儲庫中還沒有現有POM,則默認為true

自動生成的.pom文件幾乎為空(Maven坐標(groupId,artifactId,版本)但其中沒有dependencies部分),因此Maven會將libA視為沒有傳遞依賴的庫:它找不到任何內容,也無法猜測。


因此,您有四種解決方案(按推薦順序):

  • 在企業環境中,設置企業Maven存儲庫 (如Arifactory,Nexus或Apache Archivia)並將這些庫正確部署到其中,或者
  • 使用pomFile選項重新安裝libA,或
  • 手動將dependencies部分添加到生成的.pom文件中,並將libB添加到其中,或者
  • 在您的使用者pom.xml文件中明確聲明libB

有關SO的進一步閱讀:

這可能對您有所幫助:

call mvn install:install-file -Dfile=sqljdbc.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc1 -Dversion=1.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc41.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar

資料來源: https//github.com/Programmercito/osbo-framework/blob/master/libs/instala.bat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM