使用一个命令执行单个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草案旨 ...
- 使用命令将单个java文件打包为jar
思路:先将java文件编译为class文件,然后再打包为jar 参考博文:https://www.cnblogs.com/sxdcgaq8080/p/8126770.html http://www.m ...
- 单个Java文件打成可执行JAR包
1 概述 使用JDK自带的jar与java命令将单个Java文件打成可执行JAR包并运行. 当然也可以使用IDE完成,使用Maven只需要一个简单的package,但是单个文件嘛,没必要这么" ...
- 什么是环境变量?环境变量配置,jdk8的path环境变量配置,各个版本下jdk结构的变化以及环境变量配置的阐述,java命令执行三个不同目录下的java.exe说明
说明:如果只想配置java中jdk的path环境变量直接跳到三即可. 一,什么是环境变量? 一般是指在操作系统中用来指定操作系统运行环境的一些参数:如文件夹的位置. 环境变量是在操作系统中是一个特定名 ...
- jcreator把class字节码文件转成.java源文件_如何将.JAVA文件编译成.CLASS文件.说明方法和工具,或用JCreator如何操作?...
http://www.newiter.com/showart.asp?id=33 由于比较长,建议点击上面链接进入继续浏览 对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和 ...
- struts2漏洞_十大常见web漏洞——命令执行漏洞
命令执行漏洞在不同框架下都有存在,也是十分普遍且危害极大,下面我们介绍一个最具代表性的,也是影响范围最大的一个命令执行漏洞--Struts2远程代码执行漏洞. Struts2 漏洞介绍 ApacheS ...
- java 无开发环境时在记事本中编写的方法与命令行运行java代码
第一步:记事本编写java代码 用记事本编写的是java的源代码文件,里面的代码就是我们平时学习的java代码,生成的文 件后缀是.txt,更改文本文档的后缀名为 .java.java文件是不能直接执 ...
- WEB漏洞—RCE 代码及命令执行漏洞
什么是RCE? 指的是远程命令/代码执行(remote command/code execute) 在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用代码或命令执行函数去处理.比如当应 ...
- linux获取命令的返回值,Shell $?:获取函数返回值或者上一个命令的退出状态
$?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态,就是上一个命令执行后的返回结果.退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1,这和C ...
最新文章
- git - 简明指南
- springboot异步注解_SpringBoot如何实现异步、定时任务?
- 深度学习(2)回归问题
- oracle ora06576,创建oracle发邮件job导致的故障
- 计算属性的setter和getter
- 数字图像处理基本原理和常用方法
- 云服务器选ssd还是hdd_云服务器区域怎么选?
- Linux查看服务器总内存和总硬盘大小
- Ajax 滚动异步加载数据
- Rhel6服务器日志浅谈
- 01_博图默认变量和DB块变量导入昆仑通态触摸屏
- Paragon NTFS 15Mac上NTFS分区的必备工具
- 【AI应用】NVIDIA Tesla T4的详情参数
- Java基础——类与对象
- PX4-小型固定翼滑跑起飞问题分析
- hdu4565 so easy 矩阵
- 关闭windows锁屏,提升开机速度
- shopxp商城系统对接个人支付宝免签h5支付
- nginx部署访问phpadmin
- 《算法分析与设计》复习笔记