首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven多模块jenkins项目

Maven多模块jenkins项目
EN

Stack Overflow用户
提问于 2016-04-18 18:43:38
回答 3查看 2.8K关注 0票数 0

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

代码语言:javascript
复制
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全新安装-f a.xml运行良好。为此,我创建了一个Jenkins作业。现在,和a.xml一样,我还有另一个和b.xml的项目。除了Ids不同外,b.xml的代码与a.xml相同。因此,我为b.xml创建了另一个jenkins作业。这两项工作都运行得很好。但是,现在我想从单个Jenkins作业构建这两个项目,基于我们在Git中提交的项目。对于这个,我想要有一个新的项目(pom.xml),并且我想把a和b都放在模块标签下。如下所示:

代码语言:javascript
复制
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中我得到了以下异常:

代码语言:javascript
复制
Child module D:\....\a of D:\....\pom.xml does not exist

Maven找不到子模块。我的项目结构如下:

代码语言:javascript
复制
project
 |_ lookup-1
    |_ lookup-1.xml
 |_ lookup-2
    |_ lookup-2.xml
 |_ a.xml
 |_ b.xml
 |_ pom.xml

有什么提示吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-18 19:36:29

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

代码语言:javascript
复制
<parent>
|
+- a/pom.xml
|  |
|  +- lookup-1/pom.xml
|  |
|  +- lookup-2/pom.xml
|
+- b/pom.xml
|
+- pom.xml

另一种方法是将父对象更改为

代码语言:javascript
复制
<name>combined_project</name>
<artifactId>combined_project</artifactId>
<modules>
    <module>a</module>
    <module>b</module>
    <module>lookup-1</module>
    <module>lookup-2</module>
</modules>
票数 0
EN

Stack Overflow用户

发布于 2016-04-18 19:56:46

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

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

maven项目通常具有以下结构:

  • archetype-id(folder)
    • pom.xml(packaging: pom)(带有一个模块module-artifact-id)
    • module-artifact-id(folder)
      • pom.xml

如果您尝试仅构建已更新的模块,则最近未签入的模块将不会是新创建的归档的一部分。但是如果你仍然出于某种“特殊”原因想要这么做的话。以下方法可能就是您要查找的方法:

在一个项目中有两个子模块,也有两个.xml文件(pom文件在命令行中指定)(我不推荐这样做--因为它很混乱,而且不符合约定)。在一个xml文件中,假设"a.xml“”模块-1“将被指定为模块,而在"b.xml”中,“模块-2”将被指定为模块。

使用当前修改的模块调用该pom文件上的构建。例如,如果模块1被修改,则在命令行中指定a.xml作为pom.xml。

请注意,我没有尝试过,但如果可能的话,这是我能想到的方法之一,通过它我们可以实现你正在寻找的东西。

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

票数 0
EN

Stack Overflow用户

发布于 2019-05-21 17:29:03

有两种可能性:

  • 创建jenkins作业时,您必须让jenkins也克隆子模块。当我开始使用jenkins时,我遇到了类似的问题。解决方案是在Jenkins UI的高级配置管理行为下启用“递归更新子模块”复选框。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36691715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档