gpt4 book ai didi

java - 为什么 Maven 不在多模块项目中安装依赖项?

转载 作者:行者123 更新时间:2023-11-30 07:59:55 26 4
gpt4 key购买 nike

我的项目结构(多模块)是这样的

parent
projectA
projectB
... other modules

parent 实际上也有一个父级(Spring Boot)。

我已经设置了一个 Jenkins 作业来编译和测试每次提交,所以它会运行:

mvn -f pom.xml clean install

一切正常。 ProjectB 依赖于 ProjectA(类似于项目的通用类类型)并且是一个 Spring boot 应用程序。所以依赖信息是常规的:

<dependency>
<groupId>Group</groupId>
<artifactId>ProjectA</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

ProjectB 在 Jenkins 中有一个单独的工作来构建可部署的 jar 文件并将其部署到服务器。所以那里的命令是:

mvn -f ProjectB/pom.xml clean install antrun:run

这会失败并显示如下消息:

[WARNING] The POM for Group:ProjectB:1.0-SNAPSHOT is missing, no dependency information available
...
[ERROR] Failed to execute goal on project host-api: Could not resolve dependencies for project Group:ProjectB:1.0-SNAPSHOT: The following artifacts could not be resolved: Group:ProjectA:jar:1.0-SNAPSHOT...

现在我可以通过在 ProjectA 目录中执行 mvn install 来解决这个问题 - 我已经测试过了,它确实解决了这个问题。

但我的问题是我为什么要这样做? Maven 难道不应该弄清楚它应该在本地存储库中安装 jar 吗?

提前致谢

最佳答案

TL;DR 告诉 maven 你项目的结构。

当你运行命令时

mvn -f pom.xml clean install

然后 maven 使用 the reactor为了计算出模块的顺序,输出如下:

[INFO] Reactor build order:
[INFO] ProjectA
[INFO] ProjectB

所以Maven首先构建项目A,然后构建项目B。

当你运行命令时:

mvn -f ProjectB/pom.xml clean install antrun:run

那你就有问题了; maven 不是从 parent 开始的——它是从 child 开始的。它没有说明需要首先构建的项目的层次结构。

如果您想从 Maven 多模块项目构建单个项目,以及您应该使用的依赖项:

mvn -f pom.xml -pl ProjectB -am install antrun:run

地点:

  • -pl ProjectB 是“project list”选项,它告诉maven构建这些特定的项目
  • -am 是“also make”选项,它告诉 maven 构建 pl 中的项目所依赖的任何项目

关于java - 为什么 Maven 不在多模块项目中安装依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930832/

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