[英]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.