gpt4 book ai didi

java - 缺少本地 jar 的传递性 Maven 依赖

转载 作者:行者123 更新时间:2023-12-02 12:47:15 27 4
gpt4 key购买 nike

对于提前使用缩写词表示歉意。

我正在处理一个 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 的传递依赖。

需要注意的一件事是,当我为 Foo 运行 mvn clean package 时,我看到一条警告:“Missing POM for Bar”。 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放在本地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 .

最佳答案

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

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

所以,尝试:

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

关于java - 缺少本地 jar 的传递性 Maven 依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com