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

时间:2015-01-03 20:57:12

标签: java maven netbeans dependencies

假设我有一个项目A,它具有一些它需要运行的依赖项。然后我在B项目中使用这个A. B仅取决于A并且过渡依赖于每个A的依赖性,但是在B> pom中没有提到。 B中唯一定义的pom依赖是A。

A打包在没有依赖关系的jar中,因此它是轻量级的。

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

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

发生了什么事?

3 个答案:

答案 0 :(得分:2)

如前面的答案中所述,ProjectB在您的计算机上构建为ProjectA,并且您的本地存储库中提供了相关的元数据。

为什么它在第二台PC上失败了?

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

以下是一些可以帮助您解决此问题的解决方案。让我们打电话给你的另一台电脑'作为PC_B

解决方案1.在您的另一个'上构建ProjectA。计算机然后构建ProjectB

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

一个。使用此命令使其在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

湾创建一个公共工件存储库来存储您的工件。有许多开源存储库管理器,如archivanexus等可以帮助您解决此问题。然后您可以将此存储库配置为您的远程存储库之一maven pom /设置文件。 您可以使用mvn deploy将工件部署到此远程存储库(在执行必要的配置之后)。因此,您可以将ProjectA部署到远程存储库,这样当在PC_B上构建ProjectB时,它可以从新配置的远程存储库中获取所需的工件。

答案 1 :(得分:0)

项目A部署到本地存储库,因此当您在项目B中使用项目A时,它在本地工作。在您开发项目A后,您将项目发布到本地存储库。要解决此问题,您可以例如将项目A部署到一些在线可用的存储库,然后使用此存储库,或者您可以将项目A打包到包含所有依赖项的jar文件,并包含在项目B pom文件中。

答案 2 :(得分:0)

您的PC具有所有A的依赖关系,因此不会从某些Maven(中央)存储库下载它们。

在另一台计算机上,不满足A的依赖性。你能建立A& B在这台电脑上还是在你的电脑上?可能不是。 或者你只是想在这台电脑上运行 B?它是如何包装的? 另一台计算机上的NetBeans是否知道如何连接到Maven(中央)存储库?你用的是什么?