2

我需要设置一个多模块 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 repo 在哪里,但我不知道该怎么做。

4

2 回答 2

2

这样一个多模块项目的结构应该是这样的:

  pom.xml (parent)
   +--- module-1 (pom.xml)
   +--- module-2 (pom.xml)

父级将是 git 存储库的根目录。这简化了您使用此类项目(Eclipse 或任何 IDE)以及 Jenkins 的工作。

于 2013-10-25T09:28:49.997 回答
0

我不知道 jenkins git 插件是否提供相同的选项,但通过 svn 可以将 Maven-Modules 与父模块分开。

Meening 这个结构:

parent
module-1
module-2

和这样的 pom.xml:

<modules>
   <module>../module-1</module>
   <module>../module-2</module>
</modules>

问题是詹金斯使用以下路径来完成它的工作:

<jenkins_home>/jobs/<parent-jobname>/workspace/

因此,maven 将在以下位置查找模块 poms:

<jenkins_home>/jobs/<parent-jobname><module-name>

在作业 svn-configuration 中,您可以定义更多模块以使用完全独立的 repo-path 签出。此外,您必须为父级定义一个本地子文件夹,并为每个模块定义一个与您在父 pom 的模块部分中使用的文件夹对应的文件夹。所以你会得到以下结构:

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

于 2014-04-02T10:50:17.257 回答