我有一个多模块Maven项目,我有多个微服务作为模块,所以我在我的父pom.xml
中列出了模块,如下所示:
<modules>
<module>core</module>
<module>model-base</module>
<module>module1</module>
<module>module2</module>
...
<module>module5</module>
<module>module7</module>
<module>module6</module>
</modules>
此处module7
取决于module5, 6
,因此我的module7
pom.xml
中列出的依赖项如下所示:
<parent>
<artifactId>pojectA</artifactId>
<groupId>com.domain</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module7</artifactId>
<dependencies>
<dependency>
<groupId>com.domain</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.domain</groupId>
<artifactId>module5</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.domain</groupId>
<artifactId>module6</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
当我在我的本地mvn clean package
module5, 6
按预期在module7
之前调用时,但在Jenkins中,它正在尝试构建module 5
,然后module7
制作建造失败说:
[ERROR] Failed to execute goal on project module7: Could not resolve dependencies for project module7:jar:1.0-SNAPSHOT: Could not find artifact module6:jar:1.0-SNAPSHOT -> [Help 1]
我是否需要在我的pom.xml
中运行任何其他工作或重新订购模块,它与Jenkins的本地区别有何不同?感谢任何帮助。
答案 0 :(得分:0)
模块的顺序无关紧要。 Maven识别哪个项目取决于哪个其他项目并相应地设置反应堆中的构建顺序。见POM Reference, Aggregation (or Multi-Module):
在列出模块时,您不需要自己考虑模块间的依赖关系,即POM给出的模块的顺序并不重要。 Maven将对模块进行拓扑排序,以便始终在依赖模块之前构建依赖项。
答案 1 :(得分:0)
可能很清楚,问题是子模块之间的依赖关系失败,因为它们尚未安装在本地存储库中(因为它们尚未构建)。导致此问题的目标(无论如何)是mvn test
,由mvn package
调用。您的本地构建可能有效,因为在某些时候您已经完成了mvn install
并且已经引导了您的系统。
在Jenkins中,我发现使这些构建工作的唯一方法是使用预构建步骤调用Maven安装目标,然后像往常一样构建主要步骤。
答案 2 :(得分:0)
按照下面附加的屏幕截图添加 Pre-Step。这将编译您所有的顶级模块。 然后我们可以执行我们想要的任何模块。