运行单个源文件_使用一个命令执行单个Java源文件
运行单个源文件
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源文件相关推荐
- 使用一个命令执行单个Java源文件
JDK增强提案 ( JEP ) 草案于2017年末创建,名为" 启动单文件源代码程序 "(其相关的JDK问题为JDK-8192920 ). 顾名思义,该JEP草案旨在"增 ...
- cmd执行命令不等待返回值_[CVE20199535] Iterm2命令执行的不完整复现
CVE-2019-9535 昨天爆出了一个Iterm2的代码执行漏洞,看着非常的刺激吓人,因为我也在用,所以趁热赶紧尝试复现一下.源头文章是来自:https://blog.mozilla.org/se ...
- anaconda怎么运行python程序_第一个python程序,从安装python环境到人生第一个py脚本运行全过程...
文章目录 前言一.安装python运行环境 1.官网https://www.python.org下载安装包.exe 2.安装python二.python模块下载 1.配置pip环境变量 2.下载pyt ...
- linux如何执行python文件_以linux命令执行Python文件 - python
Closed. This question needs to be more focused.它当前不接受答案. 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题 ...
- ipython下怎么运行py文件_在IPython中执行Python程序文件的示例
简单使用了一下之后,我觉得如果有机会(公司里面编码是极不自由的,也无所谓,我在公司不做数据分析),我肯定是更喜欢使用IPython作为我的Python shell环境了.简单的接触发现了不少我喜欢的功 ...
- java24小时运行一次_使用crontab每分钟执行一次脚本,每24小时执行一次脚本[关闭]...
这是/ etc / crontab的格式: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .-- ...
- npm命令运行时报错_npm命令运行时报错_使用npm命令时报错误Error: EACCES: permission denied...
执行npm link 报错 liuffsunny@liufangfangdeMacBook-Pro 02learnCli % npm link npm ERR! code EACCES npm ERR ...
- mysql客户端能运行sql文件_通过mysql客户端执行sql文件的方法
选择要执行sql文件,点击"打开"按钮,如图 方法/步骤 点击"ok"按钮,如图: 下面是学习啦小编为大家整理的关于通过mysql客户端执行sql文件的方法,一 ...
- compose安装单个扩展_将自动化测试扩展到单个项目之外
compose安装单个扩展 This article shows corporations that have more than one application how to increase th ...
最新文章
- Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景
- Android客户端多线程实例分析
- android x86 按键精灵,界面版按键精灵的使用【包含内置浏览器、打开程序的方法】...
- R语言构建LogisticRegression模型并计算AUC指标
- Python介绍以及Python 优缺点
- 一道关于回文的笔试题
- CentOS系统启动流程及GRUB文件说明
- 直播 | ICML 2021论文解读:对神经网络中层特征复杂度的解释与拆分
- range 和 xrange
- Can‘t bind to formControl since it isn‘t a known property of input错误消息的处理
- 搞懂C++为什么难学,看这篇就够了!
- 深度剖析数据库国产化迁移之路
- Jenkins自动化部署容器
- Nodejs课堂笔记02
- matlab 实现行归一化和列归一化
- #6278. 数列分块入门 2
- Android开发笔记(三十六)展示类控件
- WIN10禁用security center、自动更新、Defender Service
- vmware上用kali破解wifi
- Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained
热门文章
- 【学习笔记】整体二分
- 等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)
- YbtOJ-交换游戏【树链剖分,线段树合并】
- P5644-[PKUWC2018]猎人杀【NTT,分治】
- P4254-[JSOI2008]Blue Mary开公司【李超树】
- nssl1185-试卷【状态压缩】
- ssl2295-暗黑破坏神【dp练习】
- Codeforces Round #661 (Div. 3)
- Java 常见的 30 个误区与细节
- 使用Java 8 Stream像操作SQL一样处理数据(上)