簡體   English   中英

缺少本地jar的可傳遞Maven依賴項

[英]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的依賴項。 知道為什么會這樣嗎?

本地存儲庫在Foopom.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>

因此,請嘗試:

  • 在Bar中運行mvn installmvn clean install
  • 刪除指向file:// jar的<repository>定義

暫無
暫無

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

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