Skip to content

JEP 199: Smart Java Compilation, Phase Two | 智能 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 中共享更多资源来增加并行性

还将在之后解决的问题包括但不限于:

  • 国际化
  • 对 Jigsaw 的支持

需要进行某些 javac 的调整。特别是,javac 将需要重构,以允许多个并发编译共享通用数据结构,以实现更好的加速和更高的多核 CPU 利用率。

测试

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

此外,sjavac 将以并发测试为重点进行压力测试,因为服务器 - 客户端架构本质上是并行的。

依赖

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