Maven多模块项目和Jenkins

6
我有以下项目以平面结构方式组织:

我将我的项目按照平面结构的方式组织:

parentProject
+-pom.xml

projectWeb <depends on libraryA and libraryB>
+-pom.xml

libraryA
+-pom.xml

libraryB
+-pom.xml

父项目中的pom.xml引用了其他模块,主要用于继承和依赖管理,以下是示例代码:

<project>
    ....
    <modules>
        <module>../projectWeb</module>
        <module>../libraryA</module>
        <module>../libraryB</module>
    </modules>
    <dependencyManagement>
    ...
    </dependencyManagement>
    <build>
    ...
    </build>
    ....
</project>

Jenkins 中,我为每个项目都有一个maven工作,当我构建parentProject时,它可以正常工作,即构建modules部分中引用的每个项目。我的问题是,当我提交对libraryA的更改时,我期望在构建libraryA后会启动对projectWeb的重新构建,但这并没有发生。有人知道我做错了什么吗?
提前感谢。 编辑 当我从parentProject\pom.xml中删除modules部分时,它按预期工作,但我失去了使用父pom的聚合优势。
2个回答

1

看起来你正在要求你的父POM做两件事情:

  1. 设置依赖管理
  2. 聚合你的构建

如果你将其拆分为两个POM文件会更好 - 一个用于#1的父POM和一个用于#2的聚合POM。然后你会有类似这样的东西...

[root dir] aggregate pom.xml
+ /parent 
+ /web
+ /libA
+ /libB

请参考此答案获取更多详细信息:https://dev59.com/W3A75IYBdhLWcg3wbojM#3301162

然后,您需要配置Jenkins检出根目录并运行“mvn clean install”


2
你能否详细说明为什么“如果你分开处理会更好”?我不是说这不好,但我不明白为什么它更好。不幸的是,我没有从你链接的答案中理解它。谢谢! - Ittai
1
所以,最初它只是帮助分离关注点 - 聚合器负责模块构建的顺序,父级负责依赖版本和类似 scm 连接细节的事情。 - dan
1
此外,我看到过一些人将他们的父POM分解成共同部分,然后这些共同部分成为其他父POM的父级。比如说,你有几个使用Hibernate的项目,你可以将那一堆版本控制放入一个Hibernate父POM中,然后将其用作“超级父级”(就像我刚刚编造的那个短语),从而在多个不相关的项目中获得一致的Hibernate库版本。但请确保您确实希望采用这种共享方法;您正在将多个项目耦合在一起,这可能是不可取的。 - dan
1
或者,你可以将其分解为一堆从未共享的超级父级,只是为了可读性。说实话,我从未将其推进到单个父级和单个聚合器之外,但我发现这比父级和聚合器合并在一起更加清晰。 - dan

0

这应该在Jenkins作业中进行配置。请参见“libraryA job” / “Configuration” / “Build Triggers” / “Build after other projects are built”


谢谢您的回复,但正如我在编辑后的问题中所提到的,如果我从父POM中删除模块,则构建会按预期触发,即如果我构建libraryA,则proyectWeb会自动构建,而无需您提到的配置。 - Diego Sergnese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接