Java 马文增量建筑

Java 马文增量建筑,java,maven,hudson,incremental-build,Java,Maven,Hudson,Incremental Build,我们目前有一个大型Maven 2项目,它是许多独立项目的集合,具有复杂的依赖关系,除了一些用于构建的常见父POM。最后,我们必须始终将应用程序作为一个整体发布,因此我更愿意将其转换为一个或几个大项目 有没有人在如何优化大型项目的持续集成构建方面有经验。Maven或Hudson的增量构建功能好吗?在一个模块中只做了一点小改动时,我不希望总是等待2个小时 另一方面,可以肯定的是,您必须至少重建和重新测试已更改模块的所有直接和间接依赖关系。这也是我们目前在哈德逊所做的,自动触发所有相关作业 为同一个项

我们目前有一个大型Maven 2项目,它是许多独立项目的集合,具有复杂的依赖关系,除了一些用于构建的常见父POM。最后,我们必须始终将应用程序作为一个整体发布,因此我更愿意将其转换为一个或几个大项目

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

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

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


谢谢你的建议。

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


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

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

有了增量构建插件,就可以在没有清理的情况下构建。每一个被改变的模块都会被重建,加上所有的从属模块都会被清理和重建。然而,在我的例子中,编译只使用10%的构建时间,90%用于测试。当我安装/部署所有测试时,都会再次执行,因此增量构建插件带来的时间效益非常小


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

正如@anselm所提到的,
增量构建插件
只增量构建,而不是增量测试。所有模块的测试都在运行,计划为此编写一个mojo,很快就会发回。建议是否在任何maven插件中已经存在某些功能。谢谢