Maven 不下载外部项目所需的依赖项
Maven does not download dependencies which it requires for an external project
假设我有一个项目 A,它具有一些运行所需的依赖项。然后我在B项目中使用这个A。 B 只依赖于 A 并且传递依赖于每个 A 依赖,但这在 B 的 pom.xml 中没有提到。 B在pom中唯一定义的依赖是A.
A是用jar打包的,没有依赖,所以是轻量级的。
B 项目在我的电脑上运行良好。我的本地存储库中有所有依赖项。 B 项目在 pom.xml 中只有 A。
还有另一台绝对干净的计算机,有NetBeans 和A 的jar 和B 项目。 B 运行不佳。它需要在它的 pom.xml 中定义的所有 A 依赖项。整个依赖树。如果未定义依赖项,则大多数时候会抛出 NoClassDefFoundException。它需要 A 的 pom 中定义的所有传递依赖项才能运行。在我的电脑上,只需要在 B 中定义 A 并下载传递依赖项,如果它们在本地存储库中丢失的话。
发生了什么事?
项目 A 已部署到您的本地存储库,因此当您在项目 B 中使用项目 A 时,它可以在本地工作。开发项目 A 后,您将项目发布到本地存储库。要解决此问题,您可以例如将项目 A 部署到一些在线可用的存储库,然后使用此存储库,或者您可以将项目 A 打包为包含所有依赖项的 jar 文件,并包含在项目 B 的 pom 文件中。
您的 PC 具有 A 的所有依赖项,因此它们不是从某些 Maven(中央)存储库下载的。
在另一台计算机上,A 的依赖项不满足。你能在这台电脑上和你自己的电脑上构建 A 和 B 吗?可能不会。
或者你只想在这台电脑上运行B?它是如何包装的?
另一台计算机上的 NetBeans 是否知道如何连接到 Maven(中央)存储库?你用过吗?
如前面的回答所述,ProjectB 在您的计算机上构建得很好,就像 ProjectA 一样,并且相关的元数据在您的本地存储库中可用。
为什么它在您的第二台 PC 上出现故障?
Maven 从 pom 文件中识别依赖关系和传递依赖关系。当您将 projecta 定义为 projectb 中的依赖项时,它将在 local/remote 存储库中查找它。它还将查找 projecta 的 pom 文件并找出任何传递依赖项,然后循环继续。在你的情况下,你在第二个 computer.You 的本地存储库中没有 projecta 的 jar 文件/pom 文件或关联的元数据,也没有定义任何远程存储库,Maven 可以从那里下载 projecta 的 pom/jar 和关联的元数据 data.So Maven 无法 download/copy projecta 的 pom/jar 并确定传递依赖项是什么
以下是一些可以帮助您解决此问题的解决方案。让我们将您的 'another computer' 称为 PC_B
解决方案 1. 在您的 'another' 计算机上构建项目 A,然后构建项目 B
解决方案 2。如果您无法在 PC_B 上构建 ProjectA,则必须在 local/remote 存储库
中提供它
一个。使用此命令
使其在 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。创建一个通用的工件存储库来存储您的 artifacts.There 有许多开源存储库管理器,例如 archiva, nexus 等,它们可以帮助您 this.You 然后可以将此存储库配置为您的 maven 中的远程存储库之一 pom/settings 文件。
您可以使用 mvn deploy
将工件部署到此远程存储库(在进行必要的配置后)。因此您可以将 ProjectA 部署到远程存储库,以便在 PC_B 上构建 ProjectB 时,它可以从新配置的远程存储库中获取所需的工件。
假设我有一个项目 A,它具有一些运行所需的依赖项。然后我在B项目中使用这个A。 B 只依赖于 A 并且传递依赖于每个 A 依赖,但这在 B 的 pom.xml 中没有提到。 B在pom中唯一定义的依赖是A.
A是用jar打包的,没有依赖,所以是轻量级的。
B 项目在我的电脑上运行良好。我的本地存储库中有所有依赖项。 B 项目在 pom.xml 中只有 A。
还有另一台绝对干净的计算机,有NetBeans 和A 的jar 和B 项目。 B 运行不佳。它需要在它的 pom.xml 中定义的所有 A 依赖项。整个依赖树。如果未定义依赖项,则大多数时候会抛出 NoClassDefFoundException。它需要 A 的 pom 中定义的所有传递依赖项才能运行。在我的电脑上,只需要在 B 中定义 A 并下载传递依赖项,如果它们在本地存储库中丢失的话。
发生了什么事?
项目 A 已部署到您的本地存储库,因此当您在项目 B 中使用项目 A 时,它可以在本地工作。开发项目 A 后,您将项目发布到本地存储库。要解决此问题,您可以例如将项目 A 部署到一些在线可用的存储库,然后使用此存储库,或者您可以将项目 A 打包为包含所有依赖项的 jar 文件,并包含在项目 B 的 pom 文件中。
您的 PC 具有 A 的所有依赖项,因此它们不是从某些 Maven(中央)存储库下载的。
在另一台计算机上,A 的依赖项不满足。你能在这台电脑上和你自己的电脑上构建 A 和 B 吗?可能不会。 或者你只想在这台电脑上运行B?它是如何包装的? 另一台计算机上的 NetBeans 是否知道如何连接到 Maven(中央)存储库?你用过吗?
如前面的回答所述,ProjectB 在您的计算机上构建得很好,就像 ProjectA 一样,并且相关的元数据在您的本地存储库中可用。
为什么它在您的第二台 PC 上出现故障?
Maven 从 pom 文件中识别依赖关系和传递依赖关系。当您将 projecta 定义为 projectb 中的依赖项时,它将在 local/remote 存储库中查找它。它还将查找 projecta 的 pom 文件并找出任何传递依赖项,然后循环继续。在你的情况下,你在第二个 computer.You 的本地存储库中没有 projecta 的 jar 文件/pom 文件或关联的元数据,也没有定义任何远程存储库,Maven 可以从那里下载 projecta 的 pom/jar 和关联的元数据 data.So Maven 无法 download/copy projecta 的 pom/jar 并确定传递依赖项是什么
以下是一些可以帮助您解决此问题的解决方案。让我们将您的 'another computer' 称为 PC_B
解决方案 1. 在您的 'another' 计算机上构建项目 A,然后构建项目 B
解决方案 2。如果您无法在 PC_B 上构建 ProjectA,则必须在 local/remote 存储库
中提供它一个。使用此命令
使其在 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。创建一个通用的工件存储库来存储您的 artifacts.There 有许多开源存储库管理器,例如 archiva, nexus 等,它们可以帮助您 this.You 然后可以将此存储库配置为您的 maven 中的远程存储库之一 pom/settings 文件。
您可以使用 mvn deploy
将工件部署到此远程存储库(在进行必要的配置后)。因此您可以将 ProjectA 部署到远程存储库,以便在 PC_B 上构建 ProjectB 时,它可以从新配置的远程存储库中获取所需的工件。