我使用一个具有八个内核的桌面来构建一个使用 Ant 的 Java 应用程序(通过 javac 目标)。有没有办法通过使用多个线程或进程来加快编译速度?
我知道我可以并行运行多个 Ant 任务,但我认为这不能应用于单个编译目标,不是吗?
我使用一个具有八个内核的桌面来构建一个使用 Ant 的 Java 应用程序(通过 javac 目标)。有没有办法通过使用多个线程或进程来加快编译速度?
我知道我可以并行运行多个 Ant 任务,但我认为这不能应用于单个编译目标,不是吗?
我不知道有什么方法可以告诉 ant 自己有效利用多个内核。但是您可以告诉 ant 使用 Eclipse Compiler,它内置了对多线程编译的支持。
只要您调用的 javac 不使用所有内核,您在 Ant 中说什么并不重要。您可以使用该compiler
属性来定义应为该任务使用的 java 编译器。
如果您有多个构建目标,您可以使用fork=yes
它们在外部执行目标。
http://ant.apache.org/manual/Tasks/javac.html#compilervalues
该文档似乎表明它不太可能与javac
.
任何试图同时运行大型 Ant 任务序列(例如 javadoc 和 javac)的人都隐含地承担了识别和修复它们运行的任务的所有并发错误的任务。
因此,虽然此任务有用途,但应将其视为应在某些批处理或测试情况下使用的高级任务,而不是在多路 CPU 上加快构建时间的简单技巧。
您可以使用Buck Build来提高构建速度并利用多个内核。
简而言之:
Buck 是 Facebook 开发和使用的构建系统。它鼓励创建由代码和资源组成的小型可重用模块,并在许多平台上支持多种语言。
Buck 并行构建独立工件以利用您机器上的多个内核。此外,它通过跟踪未更改的模块来减少增量构建时间,以便重新构建最小的模块集。
据我所知不是。Eclipse 编译器已经完成了一些工作来加速使用多个内核,但它并没有像您希望的那样购买那么多。
问题是,你能忍受增量编译来开发,并且只重新编译那些改变的吗?然后可以将完整的重建留给构建服务器。
我认为它可能没有多大帮助,因为 javac 可以提取内存中的所有文件,如果它必须对多个进程执行此操作,那只会加倍努力。但是,如果你想编译两段相当独立的 Java 代码,那么你可以这样做:
#!/usr/bin/env bash
javac file1.java &
javac file2.java &
javac file3.java &
wait;
如果这 3 个文件具有大部分不同的依赖关系,那么它可能会节省时间,如果依赖关系重叠,那么它可能不会节省太多时间。