将多模块Maven项目放入Jenkins

时间:2013-10-24 17:26:39

标签: git maven jenkins

我需要设置一个多模块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仓库的位置,但我不知道如何做到这一点。

2 个答案:

答案 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所期望的。