【发布时间】:2017-06-23 20:14:01
【问题描述】:
为提前使用缩写词道歉。
我正在处理一个 Maven 项目 Foo,它依赖于本地 jar Bar。 Bar 也是用 Maven 构建的,因为它是一个本地 jar,所以我在 Foo 的文件夹结构中创建了一个本地 repo,并将 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 时,我看到一个警告说“缺少 POM for Bar”。 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 放在本地 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 .
【问题讨论】:
-
你在本地用 Maven 构建 Bar 源码吗?
-
是的,我这样做了,然后我将 Bar.jar 复制到 Foo 下的本地 repo。
-
请试试我的回答