我需要设置一个多模块Maven项目来构建Jenkins(版本1.534)。每个模块都在自己的Git存储库中,彼此完全分开:
/home/git/ProjectDomain.git
/home/git/ProjectWAR.git
在本地我已经构建了自己的父POM.XML并将每个项目放在子文件夹中:
<modules>
<module>ProjectSupport</module>
<module>ProjectWAR</module>
</modules>
这适用于本地,但我无法让它在Jenkins上运行,我似乎无法找到任何在线文档来展示如何执行此操作。有人对此有很好的参考吗?
编辑:我正在尝试使用的当前父pom在/ ProjectWAR文件夹中,如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.project</groupId>
<artifactId>Project</artifactId>
<packaging>pom</packaging>
<name>Project</name>
<version>1.0</version>
<modules>
<module>../ProjectDomain</module>
<module>../ProjectWAR</module>
</modules>
</project>
它再一次在本地工作,但不在Jenkins上。我目前得到的错误是:
[FATAL] Non-readable POM /var/lib/jenkins/jobs/Project - Integration/workspace/../ProjectDomain/pom.xml: /var/lib/jenkins/jobs/Project - Integration/workspace/../ProjectDomain/pom.xml (No such file or directory) @
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:364)
at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.java:361)
at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.java:331)
所以不知何故,我需要告诉它ProjectDomain仓库的位置,但我不知道如何做到这一点。
答案 0 :(得分:2)
这样一个多模块项目的结构应如下所示:
pom.xml (parent)
+--- module-1 (pom.xml)
+--- module-2 (pom.xml)
父级将是git存储库的根目录。这可以简化你的生活,无论是使用这样的项目(Eclipse或任何IDE),还是Jenkins。
答案 1 :(得分:0)
我不知道jenkins git插件是否提供了相同的选项,但是通过svn可以将Maven-Modules与父节点分开。
改善这种结构:
parent
module-1
module-2
和像这样的pom.xml:
<modules>
<module>../module-1</module>
<module>../module-2</module>
</modules>
问题在于jenkins为其工作使用以下路径:
<jenkins_home>/jobs/<parent-jobname>/workspace/
因此,maven将寻找模块poms:
<jenkins_home>/jobs/<parent-jobname><module-name>
在作业svn-configuration中,您可以定义更多模块,以使用完全独立的repo-path进行检出。此外,您必须为父级定义一个本地子文件夹,并为每个模块定义一个子文件夹,用于加载您在父pom的modules-section中使用的文件夹。因此,您将获得以下结构:
<jenkins_home>/jobs/<parent-jobname>/workspace/<parent-name>/pom.xml
<jenkins_home>/jobs/<parent-jobname>/workspace/module-1/pom.xml
<jenkins_home>/jobs/<parent-jobname>/workspace/module-2/pom.xml
这就是Maven所期望的。