2011-04-14 109 views
3

我身边有20个模块需要建立和如何我可以更快地使用maven 2.0+我怎样才能提高使用Maven

目前我的构建从根pom.xml中使用哈德森 只是开始实现这一集成构建调用mvn干净安装

我不想跳过任何单元测试以及。

目前需要将近一个小时。请咨询。

感谢

+0

您是否正在运行Maven 3?也许你可以运行你的单元/集成测试parellelized?构建的瓶颈是什么?集成测试/编译/生成? – khmarbaise 2011-04-14 23:19:49

回答

2

希望我有更多的“高科技”的建议,但我会通过分裂测试开始分成两组:

  1. “快”的人,这将是和每一个构建的一部分
  2. “缓慢”将成为“慢”构建的一部分。 “慢”版本每天运行数次。

通常情况下,单元测试很快并且成为“快速”构建的一部分,而集成测试是“慢”构建的一部分。

我会小心使用并行测试:它们可能会产生比解决问题更多的问题。

您可以在这里的Maven阅读更多关于集成测试的实现:http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

1

什么Sasha O said是非常重要的。如果你的构建需要这么多次,也许你的测试不是简单的单元测试。因此,将测试分为两类将是一个好主意。您的快速测试应该是真正的单元测试,这意味着它们不应该涉及Spring上下文,重要的磁盘I/O或实际的数据库连接(您可以使用内存数据库,例如H2或HSQLDB)。

如果您正在使用TestNG的你的测试,你可以使用groups feature分裂你的测试。如果您使用JUnit,则@Category可能会有用。使用JUnit,这个@Category是不完美的,和it was a problem for me。我通过creating a custom JUnit Runner解决了我的问题(解决方案既不完美,但可能有所帮助)。

另一个建议:也许你可以考虑为你的持续集成服务器使用更好的硬件。事实上,编译和测试执行可以通过使用性能更好的计算机得到真正的改进。同样,如果你没有使用最新的JDK,你可以迁移到JDK 1.6例如...

最后,有与Maven一个有趣的选择,因为2.1版:增量生成。如果您使用Hudson/Jenkins,当您单击Maven构建选项的“高级”按钮时,此选项可用。

原则是只构建受您的更改影响的模块(即提交)。我们举个例子吧。我有这样的项目:

project 
    +- commons 
    +- persistence 
    +- business 

business项目是依赖于persistence,这是依赖于commons。现在,如果您在persistence项目上有提交,那么为什么您需要编译,测试和打包commons,因为此项目没有更改? incremental build选项将只重建修改的项目以及相关模块。在我的例子中,persistence将被重建,以及business

+0

嗨romaintaz,感谢您的有价值的输入如何在哈德森配置增量构建? – sharp 2011-04-21 17:12:50