2013-10-24 70 views
2

我需要在Jenkins(版本1.534)中建立一個多模塊Maven項目。每個模塊在其自己的Git倉庫,彼此完全分離:將一個多模塊Maven項目放到Jenkins中

/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> 

它再次本地工作,但不是在詹金斯。我目前得到的錯誤是這樣的:

[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

你有沒有考慮過它是否應該是一個多模塊構建?如果他們生活在不同的源代碼控制位置,也許更好的maven關係只是作爲依賴。 – chad

+0

@chad - 我正在探索。我們的源代碼控制和構建過程是一個真正的老鼠窩,創建它的人不再是在這裏,或者厭倦了回答關於它的問題。所以,很多事情對我來說都是一個謎。:) – user1071914

+0

多模塊構建的想法是具有相同的版本併發布到同一時間。這意味着不同模塊的樹應該在同一個git存儲庫中。 – khmarbaise

回答

2

這樣一個多模塊項目的結構應該是這樣的:

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

父將是Git倉庫的根。這可以簡化您的生活,無論是與這樣的項目(Eclipse還是其他任何IDE)以及Jenkins一起工作。

+0

這是做到這一點的正確方法。這將需要一些重構,但我認爲這將是值得的。 – user1071914

+0

這絕對是值得的。 – khmarbaise

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中,您可以定義更多模塊以使用完全獨立的回購路徑簽出。此外,您必須爲父級定義一個本地子文件夾,併爲每個模塊定義一個在父級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的期望。