Maven 增量构建

9
我们目前有一个庞大的Maven 2项目,它是许多单独的独立项目的集合,具有复杂的依赖关系,除了用于构建的一些常见的父POM之外。最终,我们总是需要将应用程序作为一个整体发布,因此我更喜欢将其转换为一个或几个大型项目。
有人有优化大型项目持续集成构建的经验吗? Maven或Hudson的增量构建功能好用吗?当在一个模块中只做了小的更改时,我不想总是等待2小时。
另一方面,为了确保,您始终需要重新构建和重新测试至少所有直接和间接依赖项的已更改模块。这也是我们目前使用Hudson进行的操作,自动触发所有相关作业。
将一个项目分成多个构建作业是否值得?我通常不喜欢在服务器上有生成的其他内容(如报告、文档等)可能过期的工件。
感谢任何想法。
2个回答

8
我刚刚做了更多的测试,发现Maven实际上并不支持增量构建。没有任何插件时,Maven实际上具有危险行为。如果您更改某个模块中的代码并在没有先前清理的情况下编译,则依赖模块将不会重新构建,这意味着它们将引用旧版本的依赖项,并且不会对更新的代码做出反应。
使用增量构建插件可以在不清理的情况下构建。每个已更改的模块都会被重新构建,所有依赖项都将被清除并重新构建。但是,在我的情况下,编译只使用了大约10%的构建时间,90%的时间用于测试。当我安装/部署后,所有测试都将再次执行,因此增量构建插件的时间效益非常小。
因此,我仍然认为Hudson中拆分构建是唯一的选择,但在我看来这几乎不是理想的选择。

正如@anselm所提到的,incremental-build-plugin仅在构建方面进行增量操作,而不是测试。测试正在运行所有模块,计划编写一个mojo来解决这个问题,很快会回复。如果有任何maven插件已经具备此功能,请提出建议。谢谢。 - raksja

6

我强烈建议不要将构建作业拆分为不同的部分。根据我的经验,这样做会很快失控,因为存在上下游依赖关系。增量构建非常适合你所需要的内容。如果直接设置依赖关系,则只有更改的工件及其依赖项会被重新构建。

但是,如果它们是完全独立的应用程序,并且没有或只有很少的依赖关系(如果是这样,它们就不应该在同一个反应堆下),那么我会将构建作业拆分。


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