shebang_Shebang来Java了吗?

shebang

尽管添加对Unix风格的shebang#! )的支持从来不是 JEP 330 [“启动单文件源代码程序”]的主要目标,但围绕JEP 330“单个文件源程序”的潜在功能存在一些问题。为了支持Unix风格的shebang ,在OpenJDK jdk-dev邮件列表上引起了广泛的讨论。 这场“激烈的讨论”导致Mark ReinholdJEP 330 的审查期 (现在是5月31日结束)上增加了一周时间 ,以便就JDK 330的目标JEP 330进行进一步的讨论。

尽管对于是否应该添加shebang支持仍然存在一些分歧 ,但似乎共识已转移到一个提案,以明确区分常规的独立于平台的Java源代码文件(以扩展名.java结尾)和新的。 JEP 330“可执行”的平台特定的“单文件源代码程序”。 明显的区别是值得注意的,因为它允许将Shebang表示在后者中(JEP 330可执行平台特定的单文件源代码程序),而不能在前者中使用(我们所使用的传统Java平台无关的源代码)。都习惯了)。

在此讨论中, 乔纳森·吉尔斯Jonathan Giles)的一条消息指出“不想更改JLSjavac的各种原因”,并指出“ shebang脚本是在某些(但不是全部)平台上定义的可执行格式,”指出“创建一个shebang脚本通常不只是在文件中添加第一行。”还阐明了在传统Java源代码和JEP 330可执行Java脚本之间进行显式区分的概念:

虽然将文件重命名为命令友好名称是可选的,但也希望将其重命名。 例如,名为“ HelloWorld.java”的源文件可能被安装为“ helloworld”。 而且,尽管JEP描述了使用`java HelloWorld.java`执行小型单文件程序或仅使用`helloworld`作为特定​​于平台的shebang脚本执行的用例,但似乎并没有常见的用例执行`HelloWorld.java`。 因此,如果通常将shebang脚本重命名为命令友好名称,则将无法使用“ javac helloworld”直接对其进行编译,因为这对于Javac而言不是有效的命令行。 这降低了使javac忽略shebang行的任何潜在便利。

由于Java源文件与特定于平台的可执行脚本是不同的工件,因此有区别地对待它们是有道理的,并且由于我们不想更改Java语言以支持shebang行,因此建议修改JEP和实现,以便shebang绝不会从Java源文件(即以`.java`结尾的文件)中删除行。 这就避免了处理Java源文件的工具生态系统必须处理诸如shebang行之类的任意工件的问题。 所做的更改仍将允许直接执行Java源文件(如java HelloWorld.java)和执行shebang脚本(如helloworld)。

下表总结了与每种“ Java”文件样式相关的特征和优点。

项目 传统Java源文件 JEP 330可执行单文件源代码程序
内容描述
/名称
Java源文件(以.java扩展名结尾)可执行脚本(不使用[ .java ]扩展名。)
Java源文件shebang脚本
Java源文件包含Java代码的脚本 ”或“ 特定于平台的可执行脚本
Java源文件,由以'.java'结尾的文件名标识
舍邦 不支持 支持的
平台 独立 依附
显式编译 没有

乔纳森·吉本斯(Jonathan Gibbons)总结了JEP 330的意图 :“这里的总主题不是将Java演变为脚本语言,而是使诸如Java启动器之类的工具更友好,以便支持在可执行文本文件中使用Java源代码。以减少运行简单程序的仪式。”

讨论还涵盖了其他方法,例如binfmt_misc (另请参见此处 ),Unix风格的“ here文档 ”( 此处定义文档 ),“ 在Java启动器中支持'-'STDIN源 ”以及将Linux更改为支持“ la”。 -la-bang: //!

讨论中另一个有趣的旁注是Brian Goetz 对JEP 330如何达到其当前状态“追溯” 。 他谈到了导致人们意识到的“无数小时的倾听人们对Java的关注”,“人们表达关注的一个普遍主题是'激活能量'; 用Java做简单的事情需要太多的固定工作。” Goetz指出,JShell和JEP 330是解决此问题的许多可能方法中的两种,并且这两种方法是在考虑“成本(在多个维度上)”后做出“关于哪种方法影响最大的主观选择”之后,从众多方法中选择的。做出这些选择时的收益和利益(或我们对收益的主观估计)。”

因此,“常规Java”源代码文件将不会得到shebang的支持,但这并不是什么大问题,因为它们确实不需要它们。 但是,用Java编写的基于JEP 330的基于平台的可执行单文件脚本似乎将在第一行中支持可选的shebang。 我们可能会在本周四之前知道JEP 330是否将针对JDK 11。

翻译自: https://www.javacodegeeks.com/2018/05/shebang-coming-java.html

shebang

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值