繁体   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