JDK 11 Early Access Builds包含与JEP 330相关的预览功能(“启动单个文件源代码程序”)。
我之前在“ Shebang即将来到Java? ”和“ 为JDK 11提议的JEP 329和JEP 330 ”,由于JDK 11 Early Access Builds,在这篇文章中,我将介绍此功能。
对于此演示,我正在使用最新的(截至撰写本文时) OpenJDK JDK 11 Early Access Build 24 。
使用-help
标志( java -help
)时,可以看到此JDK发行版包含对JEP 330的支持的最早迹象之一:
如上图所示,“帮助”以“ usage”语句开头,而usage语句中的最后一个示例描述了如何使用Java启动器( java )运行单文件源代码程序。 具体来说,输出显示以下“用法”,此处突出显示了本文的主题用法:
Usage: java [options] <mainclass> [args...](to execute a class)or java [options] -jar <jarfile> [args...](to execute a jar file)or java [options] -m <module>[/<mainclass>] [args...]java [options] --module <module>[/<mainclass>] [args...](to execute the main class in a module)or java [options] <sourcefile> [args](to execute a single source-file program)
为了演示此功能,我将使用一个非常简单的示例(略微),该示例改编自OpenJDK jdk-dev邮件列表上2018年5月24日的Mario Torre帖子中提供的示例。
helloYou.jv
#!/bin/java
public class Hello
{public static void main(final String[] args){final String name = System.console().readLine("\nPlease enter your name: ");System.console().printf("Hello, %s!%n", name);}
}
我已经将此文件helloYou.jv
。 请注意,它不以常规Java源代码文件结尾的.java
扩展名结尾,并且我没有将文件名与类名匹配。 实际上,我以小写字母开头文件的名称!
当我尝试直接使用OpenJDK 11 EA-24运行此文件时,我看到一个错误(“找不到或加载主类helloYou.jv”):
发生此错误的原因是,此早期访问版本中的JEP 330支持是“预览”功能。 以下屏幕快照展示了当我将标志--source=11
和--enable-preview
传递给Java启动器时,它可以工作。
我在我的文章“ Shebang即将来到Java? ”,听起来好像不允许JEP 330支持使用的单文件源程序以.java
扩展名结尾(该扩展.java
保留用于传统Java源文件)。 在下一个屏幕快照中似乎是这种情况,在该快照中,我尝试针对与上面相同的代码运行此功能,但现在文件名为helloYou. java
helloYou. java
。
最后一个图像说明我们无法使用shebang运行.java
文件,因为它们被视为常规Java文件,因此必须符合常规Java源代码文件的规范。
使用此早期访问版本,如果我注释掉shebang行,则可以运行单个源代码文件helloYou.java
(即使具有.java
扩展名,也没有--enable-preview
标志)。
如果我尝试使用OpenJDK JDK 10进行最后的操作,尝试运行如上所示的Java源代码文件,将产生前面讨论的错误消息:“错误:找不到或加载主类helloYou.java”。
这篇文章是对预览功能单文件源代码程序的初步了解,该功能现在在JDK 11 Early Access Builds中可用。
翻译自: https://www.javacodegeeks.com/2018/08/jdk-11-single-file-source-code.html