JShell 中的 JDK 工具访问 - 一口 Java

JShell 工具(最初在 JDK 9 中添加的 REPL)已在 JDK 21 中更新,以提供对 JDK 工具的更好访问。我们来看看吧!

TOOLING 脚本

从 JShell 访问 JDK 工具需要加载新的 TOOLING 脚本。它可以在 JShell 初始化时使用以下命令加载

$ jshell TOOLING

或者使用 /open 命令从 JShell 中加载,如下所示

jshell> /open TOOLING

在 JShell 中使用 JDK 工具

TOOLING 脚本允许访问以下 JDK 工具

  • jar
  • javac
  • javadoc
  • javap
  • jdeps
  • jmod
  • jlink
  • jpackage

这些工具作为 JShell 中的方法加载,并且工具将采用的参数类型会各不相同。在下面的示例中,javap 采用 Class 参数

jshell> [tool-name](Object args…)

jshell> interface Empty {}

jshell> javap(Empty.class)

然而,jar 将采用 String 数组

jshell> jar("--create", \
"--file=target/HelloWorld-jshell.jar", \ 
"--main-class=my.org.HelloWorld",\ "my/org/HelloWorld.class")

使用 JShell 的优势

从 JShell 使用 JDK 工具的一个优势在于 JShell 与平台无关,并且将处理文件路径转换等事项,因此使用 jar 的此命令将在 Linux、macOS 和 Windows 上运行

jshell> jar("--create", \
"--file=target/HelloWorld-jshell.jar", \ 
"--main-class=my.org.HelloWorld",\ 
"my/org/HelloWorld.class")

其他阅读材料

JShell 工具 - Christian Stein

JDK-8306560 - JBS 问题

编码愉快!