Maven多模块jenkins项目

时间:2016-04-18 10:43:38

标签: java xml git maven jenkins

我有一个多模块maven应用程序,我们需要通过Jenkins构建。 项目结构如下:

a.xml
<artifactId>parent-1</artifactId>
<modules>
    <module>lookup-1</module>
    <module>lookup-2</module>
</modules>

lookup-1.xml
<artifactId>lookup-1</artifactId>
<parent>
    <groupId>com.lookup</groupId>
    <artifactId>parent-1</artifactId>
    <version>1.0.1-SNAPSHOT</version>
</parent>
<name>lookup-1</name>

lookup-2.xml
<artifactId>lookup-2</artifactId>
<parent>
    <groupId>com.lookup</groupId>
    <artifactId>parent-1</artifactId>
    <version>1.0.1-SNAPSHOT</version>
</parent>
<name>lookup-2</name>

现在,     mvn clean install -f a.xml工作正常。为此,我创建了一个Jenkins工作。  现在,和a.xml一样,我有另一个带有b.xml的项目。除了不同的ID之外,b.xml具有与a.xml相同的代码。所以,我为b.xml创建了另一个jenkins作业。 两个工作都很好。但是,现在我想根据我们在Git中提交的项目,从单个Jenkins作业构建这两个项目。因为,我希望有一个新项目(pom.xml),我想在模块标签下放置a和b。像这样:

pom.xml
<name>combined_project</name>
<artifactId>combined_project</artifactId>
<modules>
    <module>a</module>
    <module>b</module>
</modules>

a.xml
<artifactId>parent-1</artifactId>
<name>a</name>
<parent>
    <artifactId>combined_project</artifactId>
</parent>
<modules>
    <module>lookup-1</module>
    <module>lookup-2</module>
</modules>

但是,它不适合我。我在maven中遇到异常:

Child module D:\....\a of D:\....\pom.xml does not exist

Maven无法找到子模块。 我遵循了项目结构:

project
 |_ lookup-1
    |_ lookup-1.xml
 |_ lookup-2
    |_ lookup-2.xml
 |_ a.xml
 |_ b.xml
 |_ pom.xml

任何提示?

3 个答案:

答案 0 :(得分:0)

a.xml有2个子模块lookup-1lookup-2。默认情况下,maven正在寻找嵌套映射中的子模块。因此,您需要具有以下目录结构:

<parent>
|
+- a/pom.xml
|  |
|  +- lookup-1/pom.xml
|  |
|  +- lookup-2/pom.xml
|
+- b/pom.xml
|
+- pom.xml

替代方法是将父级更改为

<name>combined_project</name>
<artifactId>combined_project</artifactId>
<modules>
    <module>a</module>
    <module>b</module>
    <module>lookup-1</module>
    <module>lookup-2</module>
</modules>

答案 1 :(得分:0)

Maven遵循项目结构,每个<module>将包含pom.xml文件。正如您在命令行中明确声明的那样,该文件将被选为该项目的pom.xml。但是,对于列出的每个子模块,maven将为每个子模块搜索名为"pom.xml"的确切文件。

从提供的文件夹结构中,可以推断出a.xml在命令行中明确指定时可以充当pom文件但它不能充当模块,因为它没有pom.xml专用文件夹。

  

maven项目一般具有以下结构:

     
      
  • 原型-ID(文件夹)      
        
    • pom.xml(包装:pom)(带一个模块module-artifact-id)
    •   
    • 模块伪影-ID(文件夹)      
          
      • 的pom.xml
      •   
    •   
  •   

如果您尝试仅构建已更新的模块,则最近未签入的模块将不会成为新创建的存档的一部分。但是,如果你仍然想要出于一些“特殊”的原因。您可能正在寻找以下方法:

(我不推荐它 - 因为它很乱并违反惯例) 在一个项目中有两个子模块,并且还有两个.xml文件(在命令行中指定pom文件)。在一个xml文件中,可以说“a.xml”“module-1”将被指定为模块,而在“b.xml”中,“module-2”将被指定为模块。

使用当前修改的模块调用该pom文件的构建。例如,如果修改了module-1,则在命令行中将p.xml指定为pom.xml。

请注意,我没有尝试过,但如果可能的话,这是我能想到的方法之一,我们可以通过它来完成你想要的任务。

传递参数的参考: Pass a dynamic parameter in Jenkins build

答案 2 :(得分:0)

两种可能性:

  1. 您需要在父pom的模块部分中修复子模块的路径。

  2. 在创建jenkins作业时,您还必须告诉jenkins克隆子模块。当我从詹金斯开始时,我遇到了类似的问题。解决方案是在Jenkins UI的Advanced scm behaviors下启用“递归更新子模块”复选框。

enter image description here