跳到主要内容

JEP 199:智能 Java 编译,第二阶段

概括

改进该sjavac工具,使其可以在 JDK 构建中默认使用,并对其进行泛化,使其可以用于构建除 JDK 之外的大型项目。

目标

由于与稳定性和可移植性相关的各种问题,sjavac默认情况下不在 JDK 构建脚本中使用。本 JEP 的首要目标是解决这些问题。这涉及确保该工具始终在所有软件/硬件配置上产生可靠的结果。

总体目标是提高质量,sjavac使其可以作为通用javac包装器来编译大型任意 Java 项目。

后续项目将探讨如何sjavac在 JDK 工具链中公开(如果有的话);这可能是一个单独的受支持的独立工具、一个不受支持的独立工具、与 的集成javac或其他工具。

非目标

此 JEP 的目标不是引入目前尚未到位的新功能、我们自己的构建脚本不需要的新功能以及对通用javac包装器没有贡献的新功能。目的不是重写包装器。当前运行良好的功能将保持原样。

如果需要,将其纳入sjavac产品中将成为单独的 JEP 的主题。

动机

当前的实现已被证明是有用的,并且确实提高了构建速度并允许增量构建。然而,代码的质量和整个工具的稳定性并不令人满意,而且它肯定还没有准备好公开发布。

描述

这项工作建立在JEP 139中描述的先前交付的实现之上。本 JEP 中描述的工作将通过编写、测试并向现有实现提交增量补丁来逐步执行。

最初的工作重点是解决与构建 JDK 相关的问题。这包括解决:

将要处理的其他问题包括:

  • 重构协议,可能通过利用 RMI
  • 使选项名称和语法与javac
  • System.{out,err}用更合适的东西替换日志记录
  • javac尽可能通过共享更多资源来提高并行性

未来需要解决的问题包括但不限于:

  • 国际化
  • 支持拼图

javac需要进行某些调整。最值得注意的是,javac必须进行重构,以允许多个并发编译共享通用数据结构,从而在多核计算机上实现更好的加速和更高的 CPU 利用率。

测试

除了通常的强制性单元测试之外,sjavac还将在所有平台上进行彻底测试,因为该工具的某些部分涉及特定于平台的方面,例如文件路径和后台进程的生成。

此外,sjavac由于服务器-客户端架构本质上是并行的,因此将在考虑并发性的情况下进行压力测试。

依赖关系

该 JEP 提出的工作建立在JEP 139的结果之上:增强javac以提高构建速度。