缺少本地jar的传递Maven依赖

时间:2017-06-23 20:14:02

标签: java maven

为提前使用首字母缩略词道歉。

我正在使用Maven项目Foo,这取决于本地jar BarBar也是使用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错过了传递依赖。

有一点需要注意的是,当我为mvn clean package运行Foo时,我看到一个警告说"错过POM for Bar"。 Foo使用反射调用BFoo能够找到Bar中定义的类,但看起来A无法弄清{ {1}}的依赖关系。知道为什么会这样吗?

本地回购广告在Bar' Foo中定义:

pom.xml

最后<repositories> <repository> <id>local-repo</id> <name>Local</name> <url>file://${basedir}/repo</url> </repository> </repositories> 取决于具有默认编译范围的Foo

Bar

更新 我发现为什么找不到Bar的pom,这是因为我把Bar.jar放在本地repo上,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。

1 个答案:

答案 0 :(得分:1)

您的<repository>定义可能指向不完整的存储库,例如一个repo缺少.pom文件。

假设您在本地构建Bar源代码,如果在Bar中运行mvn install,您将在本地存储库中安装其工件。这样,Foo会正常找到Bar。在这种情况下,您不需要定义<repository>

所以,试着:

  • 在栏中运行mvn installmvn clean install
  • 删除指向<repository> jar
  • file://定义