[英]Missing transitive Maven dependency of local jar
預先使用首字母縮寫詞表示歉意。
我正在一個Maven項目Foo
,它取決於本地jar Bar
。 Bar
也是用Maven構建的,並且由於它是本地jar,因此我在Foo
的文件夾結構中創建了本地存儲庫,然后將jar放在此處。
Bar.jar
放在base_dir_of_Foo\\repo\\group_ID\\artifact_ID\\1.0-SNAPSHOT\\Bar.jar
。
我遇到的問題是,當我運行Foo
,它拋出了NoClassDefFoundError
,因為它無法在Bar
的依賴項之一中找到一個類。 因此, Foo
通過Bar
缺少傳遞依賴。
需要注意的一件事是,當我為Foo
運行mvn clean package
,我看到一條警告,指出“ Bar缺少POM”。 Foo
使用反射調用B
,而Foo
能夠找到在Bar
定義的類,但是看起來A
無法弄清Bar
的依賴項。 知道為什么會這樣嗎?
本地存儲庫在Foo
的pom.xml
定義:
<repositories>
<repository>
<id>local-repo</id>
<name>Local</name>
<url>file://${basedir}/repo</url>
</repository>
</repositories>
最后, Foo
取決於具有默認編譯范圍的Bar
:
<dependency>
<groupId>group_ID</groupId>
<artifactId>artifact_ID</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
更新:我發現了為什么找不到Bar的pom的原因,這是因為我們將Bar.jar放在本地倉庫中,maven只會將jar文件復制到本地存儲庫緩存中,而不會從jar中提取pom.xml,這是預期的嗎?
在C:\\ Users \\ hancwang.m2 \\ repository \\ group-id \\ Bar \\ 1.0-SNAPSHOT中,我看到Bar-1.0-snapshot.jar被復制了,但是沒有Bar-1.0-snapshot.pom。
您的<repository>
定義可能指向一個不完整的存儲庫,例如,一個缺少.pom
文件的存儲庫。
假設您在本地構建Bar源代碼,如果在Bar中運行mvn install
,則會將其工件安裝在本地存儲庫中。 這樣,Foo將正常找到Bar。 在這種情況下,您不需要定義<repository>
。
因此,請嘗試:
mvn install
或mvn clean install
file://
jar的<repository>
定義
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.