5

我们有一个庞大的代码库,在开发人员机器上大约需要 12 分钟才能使用 JavaCC 自动生成一些 Java 5 类,然后编译所有类并运行单元测试。

该项目由多个可以分组构建的项目组成,但我们的目标是在 10 分钟内完成一个完整的构建

有什么技巧可以减少此构建时间?

谢谢

4

8 回答 8

3

一种可能节省一些时间的快速修复方法是确保您使用服务器 JVM 运行 Ant(默认情况下它使用客户端 VM)。将 ANT_OPTS 设置为包括“-server”。

于 2008-09-28T23:03:55.363 回答
2
  • 分析构建过程并查看瓶颈在哪里。这可以为您提供一些关于如何改进流程的想法。
  • 尝试在多核/CPU 机器上并行构建独立项目。作为这个想法的扩展,您可能想四处寻找与 distcc 等效的 Java(不知道它是否存在),以将您的构建分发到多台机器上。
  • 获得更好的机器。
于 2008-09-28T23:11:56.560 回答
2

减少构建时间的一些技巧:

  1. 做更少的工作。 例如删除不必要的日志记录/回显到文件和控制台

  2. 使您的构建“增量”。编译只改变类。

  3. 消除重复劳动。 说起来容易做起来难,但是如果你在调试模式下运行构建(“ant -debug”),你有时会看到冗余的任务或目标。

  4. 避免昂贵的操作。 复制文件,以及将 jar 打包成 war 是发布所必需的。对 jar 进行签名很昂贵,并且只有在可能的情况下才应该为里程碑发布而不是每次构建都这样做

于 2012-10-23T10:09:24.357 回答
1

现在您已经更详细地解释了该过程,这里还有两个选项:

  1. 专用机器/集群,其构建速度比普通工作站快得多。然后,开发人员将在提交之前运行一个脚本,在专用机器/集群上构建他们的代码。

  2. 将分区更改为子项目,以便通过修改另一个项目来破坏一个项目更加困难。这应该会降低在每次提交之前进行完整构建的重要性。只有涉及敏感子项目或跨越多个项目的提交才需要通过完整构建进行“检查”。

于 2008-09-29T20:50:19.793 回答
1

尝试受到务实程序员的启发。只编译必要的,有两个或更多的测试套件。一个用于快速测试,另一个用于完整测试。考虑是否真的需要每次都使用每个构建步骤。有必要尝试使用 jikes 编译器而不是 javac。在项目跨越数百个课程后,我改用 jikes 来提高速度。但请注意潜在的不兼容问题。不要忘记将一个多合一的目标包含在内,以通过完全重建和项目的全面测试来执行每一步。

于 2008-09-29T13:58:34.683 回答
0

这在短期内可能无济于事,但我认为无论如何我都应该把它扔掉。

如果您的项目可以拆分为更小的项目(例如数据库子系统、日志记录等),您可能会对使用 maven 之类的东西来处理构建感兴趣。您可以将每个较小的部分作为单独的项目或模块运行,如果存在更改,maven 将能够维护需要构建的内容。在这种情况下,构建可以专注于项目的主要部分,并且不会花费那么长时间。

于 2008-09-29T00:46:47.800 回答
0

所用时间的细分是什么:

  1. 生成类
  2. 编译类
  3. 运行测试

根据您的项目,通过为 javac(memoryMaximumSize) 和 junit(maxmemory) 分配更大的堆大小,您可能会看到构建时间显着增加。

于 2008-09-29T02:13:35.437 回答
0

整个构建持续时间少于 10 分钟非常重要吗?如果您使子项目彼此独立,您可以在已经编译其他子项目的同时处理一个子项目(想想 Maven 或 Ivy 来管理依赖项)。

另一种解决方案(如果您的模块相当稳定)是将您的子项目视为独立项目。然后,每个项目都将遵循自己的发布周期,并可从本地 Maven/Ivy 存储库中获得。如果至少项目的一部分相当稳定,这当然会很好。

于 2008-09-30T17:17:40.810 回答