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

标签 java maven netbeans dependencies

假设我有一个项目 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/

相关文章:

java - 使用 Netbeans 将 JavaFx 代码部署到 Android 设备

Java Bukkit API 测试项目名称

java - 来自字母数字字符串的与语言无关的随机数生成器

angularjs - OTS将Glyphicon的字体文件的: Failed to convert WOFF 2. 0字体错误解析为SFNT,用于Spring-boot

java - 在 Maven 中我们可以像在 npm 中那样定义脚本吗?

java - 使用 Maven 时避免损坏的 Jars(无效的 LOC header )

java - 如何打破循环

java - GWT——服务器端同步块(synchronized block)

java - 节奏模板引擎与 GAE/J : AccessControlException in even simplest case

java - 检测 JDialog 中 JPanel 上执行的操作