使用一个命令执行单个Java源文件

JDK增强提案JEP草案于2017年末创建,名为“ 启动单文件源代码程序 ”(其相关的JDK问题为JDK-8192920 )。 顾名思义,该JEP草案旨在“增强Java启动器以支持运行作为Java源代码的单个文件提供的程序。” 换句话说,正如JEP所描述的,如果有一个典型的自包含的HelloWorld.java源代码文件 ,则只需从命令行运行java HelloWorld.java ,而无需使用javacHelloWorld.java编译为HelloWorld.class在使用Java启动器运行之前。

JEP所有者乔纳森·吉本斯Jonathan Gibbons)将JEP引入compile -dev邮件列表时总结了这一点:

该JEP草案包含一项增强| java |的建议。 启动器以支持运行作为Java源代码的单个文件提供的程序。 该程序将被编译并运行,而无需显式调用javac或打包jar文件。

预期该功能的主要用例是运行非常简单的Java应用程序( JEP称其为“小型实用程序”)的人员以及希望学习基本Java功能的人们。 我在博客文章“ 通过简单测试学习Java ”和“在没有IDE的情况下编译和运行Java ”中描述了类似的用例。 JEP指出,在这些用例的背景下,“纯粹的仪式是在运行程序之前必须先编译程序。 此外,单个源文件可能会编译为多个类文件,这给“运行该程序”的简单目标增加了打包开销。 希望能够使用Java启动器直接从源代码运行程序。”

与该JEP草案相关的JDK邮件列表上有两个有趣的讨论要点。 讨论的主题之一是在Java源代码文件的第一行上放置“ shebang ”的能力,该文件应按此JEP描述的方式运行(例如Groovy中使用的语言以及Linux / Unix shell)。 在撰写本文时,JEP草案目前在“ Shebang”文件的标题下解决了该主题,并指出:

使用源文件模式调用Java启动程序的“ shebang”文件通常以以下内容开头:

#!/path/to/java --source
如果文件以开头,则允许在源文件模式下使用此类文件
#! 在编译文件的其余部分之前,将删除第一行的内容,但不包括第一换行符。 …当文件以 #! ,则保留第一行末尾的换行符,以便任何错误消息中的行号保持不变。

与该JEP草案相关的第二个有趣的讨论点是问题,即它是否与JDK 9引入的jshell的关系有关。 正如Brian Goetz在 compiler-dev邮件列表上的消息中所指出的那样 ,“很自然(并且很普遍)”期望使用jshell而不是增强的java启动器来运行这些类似于shell的单一源Java源文件。 。 Goetz 在该消息中解释了为什么这并不像最初看起来的那样好,因为jshell是为“良好的交互体验”而不是作为“批处理运行程序”而明确设计的。 JEP草案的当前版本在“ 替代方案”部分中对此进行了说明,其中指出:

我们可以将“一次性运行”任务委托给
jshell工具。 虽然乍一看似乎很明显,但这在设计时显然是非目标
jshell
jshell工具被设计为交互式外壳,许多设计决策都倾向于提供更好的交互式体验。 成为批处理运行程序的额外限制会加重它的负担,从而降低交互体验。

尽管目前这只是JEP的草案 ,但我很喜欢这个想法,并认为将其添加到JDK的未来版本中将是一个很好的次要功能。 此功能将使Java新手可以更轻松地测试基本Java示例,并且不会给Java新手增加他或她不习惯与某些其他(通常是动态类型的)编程语言一起使用的额外步骤。 对于经验丰富的Java开发人员来说也很方便。 我仍然发现自己写了一些Java小片段来学习某些东西的工作原理(并向他人演示它是如何工作的),而该草案建议的JDK增强功能将使其变得更容易一些,尤其是当Java源文件编译成多个.class文件时。 这是我在Groovy开发中喜欢的功能之一,并且对于简单的Java开发而言,它会很不错。

翻译自: https://www.javacodegeeks.com/2018/02/executing-single-java-source-files-one-command.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值