9

我们目前有一个大型 Maven 2 项目,它是许多具有复杂依赖关系的单个独立项目的集合,除了一些用于构建的公共父 POM 之外。最后,我们总是必须将应用程序作为一个整体交付,所以我宁愿将其转换为一个或几个大项目。

有没有人在如何优化大型项目的持续集成构建方面有经验。Maven 或 Hudson 的增量构建功能有什么好处吗?我不希望在一个模块中只进行小的更改时总是等待 2 小时。

另一方面,可以肯定的是,您总是必须至少重新构建和重新测试已更改模块的所有直接和间接依赖项。这也是我们目前对 Hudson 所做的事情,自动触发所有相关作业。

将同一个项目拆分为多个构建作业是否有回报?我通常不喜欢在服务器上放置所有其他生成的东西(如报告、文档等)可能已经过时的工件。

感谢您的任何想法。

4

2 回答 2

8

我只是做了一些更多的测试,我发现 Maven 并不真正支持增量构建。没有任何插件 Maven 实际上有一个危险的行为。如果您更改某些模块中的代码并在没有事先清理的情况下进行编译,则依赖模块将不会被重建,这意味着它们会引用旧的过时版本的依赖项,并且不会对更新的代码做出反应。

使用增量构建插件,无需清理即可构建。每个更改的模块都将被重建,所有依赖项都将被清理和重建。然而,在我的例子中,编译只使用了 10% 的构建时间,90% 用于测试。当我安装/部署时,所有测试都会再次执行,因此增量构建插件的时间收益非常小。

所以我仍然只看到在 Hudson 中拆分构建的选项,这在我看来并不理想。

于 2011-06-23T10:00:45.230 回答
6

我强烈建议不要分成不同的构建工作。根据我的经验,这可能会因上游和下游依赖项而迅速失控。增量构建非常适合您的需要。如果直接设置依赖项,则仅会重建更改的工件及其依赖项。

我会拆分构建作业,但如果它们是完全独立的应用程序,没有或很少依赖关系(如果这是真的,那么它们不应该在同一个反应器下,因此增量构建是不可能的)

于 2011-06-08T16:03:49.567 回答