Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven不下载外部项目所需的依赖项_Java_Maven_Netbeans_Dependencies - Fatal编程技术网

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

Java Maven不下载外部项目所需的依赖项,java,maven,netbeans,dependencies,Java,Maven,Netbeans,Dependencies,假设我有一个项目a,它需要一些依赖项才能运行。然后我在一个B项目中使用这个A。B只依赖于A,可传递地依赖于每个A依赖,但B的pom中没有提到这一点。pom中B唯一定义的依赖项是A A封装在一个没有依赖项的罐子中,因此它是leightweight B项目在我的电脑上运行良好。我的本地存储库中有所有依赖项。B项目在pom中只有A 还有另一台计算机是绝对干净的,有NetBeans,有A的jar和B项目。B跑得不好。它需要在其pom中定义的所有依赖项。整个依赖关系树。如果未定义依赖项,则大多数情况下会抛

假设我有一个项目a,它需要一些依赖项才能运行。然后我在一个B项目中使用这个A。B只依赖于A,可传递地依赖于每个A依赖,但B的pom中没有提到这一点。pom中B唯一定义的依赖项是A

A封装在一个没有依赖项的罐子中,因此它是leightweight

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

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


发生了什么?

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

您的电脑具有A的所有依赖项,因此它们不是从某个Maven(中央)存储库下载的

在另一台计算机上,不满足A的依赖关系。你能在这台计算机和你的计算机上建立A&B吗?可能不会。 还是只想在此计算机上运行B?它是怎样包装的?
另一台计算机上的NetBeans是否知道如何连接到Maven(中央)存储库?您是否使用了任何?

如前面的答案所述,ProjectB可以作为ProjectA在您的机器上正常构建,并且相关的元数据可以在您的本地存储库中获得

为什么第二台电脑出现故障?

Maven从pom文件中识别依赖项和可传递依赖项。当您在projectb中将projecta定义为依赖项时,它将在本地/远程存储库中查找它。它还将查找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。创建一个公共工件存储库来存储工件。有许多开源存储库管理器(如等)可以帮助您实现这一点。然后,您可以在maven pom/设置文件中将此存储库配置为远程存储库之一。
您可以使用
mvn deploy
将工件部署到此远程存储库(在进行必要的配置之后)。因此,您可以将ProjectA部署到远程存储库,这样当ProjectB在PC_B上构建时,它可以从新配置的远程存储库中获取所需的工件。

在不工作的计算机上,A不是一个项目,只是一个jar,因此我无法在那里构建它。我只想在这台计算机上运行B。B是一个maven项目。NetBeans知道如何连接到另一台计算机上的中央存储库,因为当他将依赖项添加到pom时,这些依赖项是从存储库中下载的。因此,您的意思是,如果A定义了依赖项,这些依赖项位于中央存储库中,但它没有将其打包到其jar中,并且当您将此jar交给某人时,这行不通吗?即使这是一个maven项目?只有将所有依赖项打包到jar中,它才能工作?当您将maven项目打包到一个没有依赖项jar的jar中,但仅使用定义这些依赖项的pom和其他依赖于它的项目时,maven将不会下载这些缺少的依赖项?您可以附加pom文件吗?问题是项目A在中央存储库中不可见,因此无法在每台计算机上运行项目B。您好。项目A可能在两台计算机的本地回购中都可见。但是,似乎另一台计算机可能在没有pom的情况下将其安装到存储库中,这可能是问题所在。我会试试这个。如果它不起作用,我将附加poms。谢谢。我会尽快试用,并让你知道结果。我要尝试的解决方案是解决方案2——我不能给其他计算机源文件,因此他无法构建项目。但我可以给他罐子和pom。他确实在本地存储库中安装了jar,但我认为没有使用-DpomFile。这是他在本地repo中可能缺少的,以便B构建正常运行(从pom可传递的依赖信息中获取)。我们确实使用了nexus,但似乎我们不应该让用户用他的计算机访问这个存储库。我试过了,它似乎正在工作。我用不同的项目进行了模拟,但似乎本地回购协议中缺少POM会导致