什么是sjavac,是谁的,我如何使用它?
在OpenJDK邮件列表上有一个名为sjavac
的工具。 此外,还有两个相关的JEP : JEP 139:增强javac以提高构build速度和JEP 199:智能Java编译,第二阶段 。
我的问题是:
- 什么是
sjavac
工具? - 这是为谁准备的?
- 我如何使用它?
免责声明:自我回答问题。 只是想把这个工具的知识带到StackOverflow社区,并创build对未来sjavac FAQ的参考。
什么是sjavac工具?
sjavac
工具是一个围绕javac
的(据称是聪明的 )包装器,在Oracle开发,旨在提供以下function:
- 增量编译 – 只重新编译必要的内容
- 并行编译 – 在编译过程中使用多个核心
- 保持编译器在一个热门的虚拟机 – 重复使用JIT的javac实例连续调用
在重新编译一组源文件时,javac会查看.java和.class文件的时间戳,以确定要保留的内容以及要重新编译的内容。 这是非常粗糙的,对于大型代码库可能是毁灭性的。 除了时间戳sjavac检查依赖的公共API来判断哪些文件需要重新编译。
Sjavac也试图将编译分割成多个javac调用。 换句话说,它为构build过程带来了高水平的并行性。
最后,sjavac工具被分割成一个客户端部分和一个服务器部分,它允许你离开sjavac在后台运行,被JIT控制并准备在连续调用中使用。
这是为谁准备的?
鼓励开发大型项目并在开发过程中经常重新编译代码的人尝试使用sjavac
。 (但请注意,该工具目前正在开发中,仍然存在未解决的问题。)
我如何使用它?
该工具尚未与OpenJDK一起提供,因此您必须从OpenJDK jdk9 / dev存储库中获取该工具。 另外,还没有启动器,所以你用java com.sun.tools.sjavac.Main
调用它。
你可以在这里试试sjavac的jdk8 backport: http ://sjavac.s3-website-eu-west-1.amazonaws.com/