简化Java开发:引入多文件程序启动

JEP 458: 启动多文件源代码程序

JEP 458 已被 Closed/Delivered,并将在 JDK 22 中实现。该 JEP 提议增强 Java 启动器,使其能够执行由一个或多个 Java 源代码文件组成的应用程序。这一改进允许开发者从小型应用程序逐步过渡到大型应用程序,推迟了完整的项目设置。

背景

在 JDK 11 中引入的 JEP 330 允许开发者直接使用 java 命令执行单文件源代码程序,但该功能仅限于单个 .java 文件。JEP 458 将这一功能扩展到多文件源代码程序,减少了初始设置需求,支持更加探索性的编程方式。

动机

该更新的动机在于认识到所有大型程序都始于小型项目。在开发的早期阶段,重点是实验和探索,而不是最终交付的产物。项目结构通常是不稳定的,随着开发的进展频繁变化。通过支持无需显式编译即可执行多文件源代码程序,JEP 458 旨在支持快速迭代和重大变更,这在开发的初始阶段至关重要。这一方法显著降低了开发者的门槛,无论是经验丰富的开发者还是新手,都不需要立即学习和配置额外的工具(如 javac 或第三方构建系统)。

功能操作

该功能的操作简单但强大。例如,假设一个目录包含两个文件 Prog.javaHelper.java,每个文件声明一个类:

// Prog.java
class Prog {
    public static void main(String[] args) { Helper.run(); }
}

// Helper.java
class Helper {
    static void run() { System.out.println("Hello!"); }
}

运行 java Prog.java 将在内存中编译 Prog 类并调用其 main 方法。如果 Prog 类引用了 Helper 类,启动器将自动在内存中编译 Helper.java。这一过程由 Java 启动器动态管理,按需编译和加载类,无需特定顺序,从而促进更灵活的开发工作流程。

与现有项目的集成

为了确保与现有 Java 项目的平滑集成,该改进规定仅编译程序直接引用的 .java 文件。这防止了编译同一目录中过时或实验性代码的意外情况。此外,启动器遵循 Java 的包约定,要求源文件按其包结构组织。这种结构化方法扩展到处理模块化源代码程序,启动器能够根据源树根目录中的 module-info.java 文件识别和编译模块。

非目标

该提案明确了非目标以管理期望和范围。它明确指出不支持通过 "shebang" 机制启动多文件源代码程序,该功能仍仅限于单文件程序。此外,该提案不旨在简化源代码程序中外部库依赖的集成,这部分考虑留待未来的改进。

总结

Java 应用程序启动器的这一更新代表了 Java 开发生态系统的重要进步,满足了 Java 社区不断发展的需求。

阅读 41
0 条评论