我们有一个大型的代码库,在开发人员的机器上花费大约12分钟的时间,使用JavaCC自动生成一些Java 5类,然后编译所有的类以及运行unit testing。
该项目由多个项目组成,可以分组,但我们的目标是在10分钟内完成一个项目
有什么提示可以减less这个编译时间?
谢谢
一个可能会缩短一段时间的快速修复是确保您使用服务器JVM运行Ant(默认情况下,它使用客户端VM)。 设置ANT_OPTS以包含“-server”。
尝试从实用的程序员的启发。 只编译必要的,有两个或更多的测试套件。 一个用于快速测试,另一个用于全面测试。 考虑是否真的需要每次使用每个构建步骤。 它必须尝试使用jikes编译器而不是javac。 在项目跨越数百个课程之后,我改用jike来提高速度。 但要注意潜在的不兼容问题。 不要忘记把所有项目都包含在一个目标中,以便全面重建和全面测试项目。
现在您已经详细解释了这个过程,下面是另外两个选项:
一个专门的机器/集群,其构建比普通工作站上的要快得多。 然后开发者在提交之前运行一个脚本,在专用的机器/集群上构建他们的代码。
将分区更改为子项目,以便通过修改另一个项目来更容易地中断一个项目。 这应该在每次提交之前做一个完整的构建就不那么重要了。 只有触及敏感子项目的提交或跨越多个项目的提交才需要通过完整构建来“检查”。
减少构建时间的一些技巧:
做更少的工作。 例如删除不必要的日志/回应文件和控制台
使你的构建“增量” 。 只编译更改类。
消除重复的努力。 说起来容易做起来难,但是如果以调试模式(“ant-debug”)运行构建,有时可以看到多余的任务或目标。
避免昂贵的操作。 复制文件以及将罐子打包成战争是发行所必需的。签署罐子很昂贵,只有在可能的情况下才能完成“里程碑版本而不是每个版本
这可能在短期内无济于事,但我认为我应该把它扔出去。
如果你的项目可以分解成更小的项目(一个数据库子系统,例如日志记录),你可能有兴趣使用类似maven的东西来处理构建。 你可以把每一个小小的东西作为一个单独的项目或模块运行,如果存在变化,maven将能够维持需要建立的东西。 在这个构建可以专注于你的项目的主要部分,这将不会花费很长的时间。
什么是花费的时间细分:
根据您的项目,通过将更大的堆大小分配给javac(memoryMaximumSize)和junit(maxmemory),您可能会看到构建时间显着增加。
整个构建持续不到10分钟是非常重要的吗? 如果你使子项目彼此独立,那么你可以在一个子项目上工作,而已经编译了其他子项目(想想Maven或Ivy来管理依赖项)。
另一个解决方案(如果你的模块是相当稳定的)就是把你的子项目作为独立的项目来处理。 然后,每个项目将遵循其自己的发布周期,并可从当地的Maven / Ivy仓库获得。 如果项目的至少部分是相当稳定的,这当然会起作用。