运行单个源文件

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

运行单个源文件

运行单个源文件_使用一个命令执行单个Java源文件相关推荐

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

    JDK增强提案 ( JEP ) 草案于2017年末创建,名为" 启动单文件源代码程序 "(其相关的JDK问题为JDK-8192920 ). 顾名思义,该JEP草案旨在"增 ...

  2. cmd执行命令不等待返回值_[CVE20199535] Iterm2命令执行的不完整复现

    CVE-2019-9535 昨天爆出了一个Iterm2的代码执行漏洞,看着非常的刺激吓人,因为我也在用,所以趁热赶紧尝试复现一下.源头文章是来自:https://blog.mozilla.org/se ...

  3. anaconda怎么运行python程序_第一个python程序,从安装python环境到人生第一个py脚本运行全过程...

    文章目录 前言一.安装python运行环境 1.官网https://www.python.org下载安装包.exe 2.安装python二.python模块下载 1.配置pip环境变量 2.下载pyt ...

  4. linux如何执行python文件_以linux命令执行Python文件 - python

    Closed. This question needs to be more focused.它当前不接受答案. 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题 ...

  5. ipython下怎么运行py文件_在IPython中执行Python程序文件的示例

    简单使用了一下之后,我觉得如果有机会(公司里面编码是极不自由的,也无所谓,我在公司不做数据分析),我肯定是更喜欢使用IPython作为我的Python shell环境了.简单的接触发现了不少我喜欢的功 ...

  6. java24小时运行一次_使用crontab每分钟执行一次脚本,每24小时执行一次脚本[关闭]...

    这是/ etc / crontab的格式: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .-- ...

  7. npm命令运行时报错_npm命令运行时报错_使用npm命令时报错误Error: EACCES: permission denied...

    执行npm link 报错 liuffsunny@liufangfangdeMacBook-Pro 02learnCli % npm link npm ERR! code EACCES npm ERR ...

  8. mysql客户端能运行sql文件_通过mysql客户端执行sql文件的方法

    选择要执行sql文件,点击"打开"按钮,如图 方法/步骤 点击"ok"按钮,如图: 下面是学习啦小编为大家整理的关于通过mysql客户端执行sql文件的方法,一 ...

  9. compose安装单个扩展_将自动化测试扩展到单个项目之外

    compose安装单个扩展 This article shows corporations that have more than one application how to increase th ...

最新文章

  1. Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
  2. Android客户端多线程实例分析
  3. android x86 按键精灵,界面版按键精灵的使用【包含内置浏览器、打开程序的方法】...
  4. R语言构建LogisticRegression模型并计算AUC指标
  5. Python介绍以及Python 优缺点
  6. 一道关于回文的笔试题
  7. CentOS系统启动流程及GRUB文件说明
  8. 直播 | ICML 2021论文解读:对神经网络中层特征复杂度的解释与拆分
  9. range 和 xrange
  10. Can‘t bind to formControl since it isn‘t a known property of input错误消息的处理
  11. 搞懂C++为什么难学,看这篇就够了!
  12. 深度剖析数据库国产化迁移之路
  13. Jenkins自动化部署容器
  14. Nodejs课堂笔记02
  15. matlab 实现行归一化和列归一化
  16. #6278. 数列分块入门 2
  17. Android开发笔记(三十六)展示类控件
  18. WIN10禁用security center、自动更新、Defender Service
  19. vmware上用kali破解wifi
  20. Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained

热门文章

  1. 【学习笔记】整体二分
  2. 等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)
  3. YbtOJ-交换游戏【树链剖分,线段树合并】
  4. P5644-[PKUWC2018]猎人杀【NTT,分治】
  5. P4254-[JSOI2008]Blue Mary开公司【李超树】
  6. nssl1185-试卷【状态压缩】
  7. ssl2295-暗黑破坏神【dp练习】
  8. Codeforces Round #661 (Div. 3)
  9. Java 常见的 30 个误区与细节
  10. 使用Java 8 Stream像操作SQL一样处理数据(上)