gpt4 book ai didi

java - Maven 不会下载外部项目所需的依赖项

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

假设我有一个项目 A,它有一些运行所需的依赖项。然后我在B项目中使用这个A。 B 仅依赖于 A 并传递依赖于每个 A 依赖项,但这在 B 的 pom.xml 中没有提及。 B在pom中唯一定义的依赖是A。

A被打包在jar中,没有依赖,所以它是轻量级的。

B 项目在我的电脑上运行良好。我的本地存储库中有所有依赖项。 B项目的pom中只有A。

还有另一台计算机绝对干净,有 NetBeans 并有 A 的 jar 和 B 项目。 B 运行得不好。它需要在其 pom.xml 中定义的所有 A 依赖项。整个依赖树。如果未定义依赖项,大多数情况下会抛出 NoClassDefFoundException。它需要 A 的 pom 中定义的所有传递依赖项才能运行。在我的电脑上,如果本地存储库中缺少传递依赖项,则只需在 B 中定义 A 并下载传递依赖项。

发生了什么?

最佳答案

如前面的答案中所述,ProjectB 可以像 ProjectA 一样在您的计算机上正常构建,并且关联的元数据可在您的本地存储库中使用。

为什么它在您的第二台电脑上失败?

Maven 从 pom 文件中识别依赖关系和传递依赖关系。当您将projecta定义为projectb中的依赖项时,它将在本地/远程存储库中查找它。它还将查找 Projecta 的 pom 文件并找出任何传递依赖项,然后循环继续。在您的情况下,您在第二台计算机的本地存储库中没有projecta的jar文件/pom文件或关联的元数据。您也没有定义任何远程存储库,Maven可以从中下载projecta的pom/jar和关联的元数据。因此,Maven 无法下载/复制projecta 的pom/jar 并识别传递依赖项是什么

以下是一些可以帮助您解决此问题的解决方案。我们将您的“另一台计算机”称为 PC_B

解决方案 1. 在“另一台”计算机上构建 ProjectA,然后构建 ProjectB

解决方案 2。如果您无法在 PC_B 上构建 ProjectA,则必须使其在本地/远程存储库中可用

a.使用此命令使其在 PC_B 的本地 Maven 存储库中可用

  mvn install:install-file -Dfile=projecta-1.0.jar -DpomFile=projecta-pom.xml

(您必须将 jar 和 ProjectA 的 pom 文件复制到 PC_B)

完成此操作后,ProjectA 和关联的元数据将添加到 PC_B 上的本地 Maven 存储库中,因此您应该能够构建 ProjectB

b.创建一个公共(public) Artifact 存储库来存储您的 Artifact 。有许多开源存储库管理器,例如 archiva , nexus等可以帮助您完成此操作。然后您可以将此存储库配置为 Maven pom/设置文件中的远程存储库之一。您可以使用mvn deploy将 Artifact 部署到此远程存储库(在进行必要的配置之后)。因此,您可以将ProjectA部署到远程存储库,以便当ProjectB在PC_B上构建时,它可以从新配置的远程存储库中获取所需的 Artifact 。

关于java - Maven 不会下载外部项目所需的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759445/

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