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. 使用命令将单个java文件打包为jar

    思路:先将java文件编译为class文件,然后再打包为jar 参考博文:https://www.cnblogs.com/sxdcgaq8080/p/8126770.html http://www.m ...

  3. 单个Java文件打成可执行JAR包

    1 概述 使用JDK自带的jar与java命令将单个Java文件打成可执行JAR包并运行. 当然也可以使用IDE完成,使用Maven只需要一个简单的package,但是单个文件嘛,没必要这么" ...

  4. 什么是环境变量?环境变量配置,jdk8的path环境变量配置,各个版本下jdk结构的变化以及环境变量配置的阐述,java命令执行三个不同目录下的java.exe说明

    说明:如果只想配置java中jdk的path环境变量直接跳到三即可. 一,什么是环境变量? 一般是指在操作系统中用来指定操作系统运行环境的一些参数:如文件夹的位置. 环境变量是在操作系统中是一个特定名 ...

  5. jcreator把class字节码文件转成.java源文件_如何将.JAVA文件编译成.CLASS文件.说明方法和工具,或用JCreator如何操作?...

    http://www.newiter.com/showart.asp?id=33 由于比较长,建议点击上面链接进入继续浏览 对于很多应用系统,常常需要动态装载和执行类和代码片断,这有利于部署的简易性和 ...

  6. struts2漏洞_十大常见web漏洞——命令执行漏洞

    命令执行漏洞在不同框架下都有存在,也是十分普遍且危害极大,下面我们介绍一个最具代表性的,也是影响范围最大的一个命令执行漏洞--Struts2远程代码执行漏洞. Struts2 漏洞介绍 ApacheS ...

  7. java 无开发环境时在记事本中编写的方法与命令行运行java代码

    第一步:记事本编写java代码 用记事本编写的是java的源代码文件,里面的代码就是我们平时学习的java代码,生成的文 件后缀是.txt,更改文本文档的后缀名为 .java.java文件是不能直接执 ...

  8. WEB漏洞—RCE 代码及命令执行漏洞

    什么是RCE? 指的是远程命令/代码执行(remote command/code execute) 在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用代码或命令执行函数去处理.比如当应 ...

  9. linux获取命令的返回值,Shell $?:获取函数返回值或者上一个命令的退出状态

    $?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态,就是上一个命令执行后的返回结果.退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1,这和C ...

最新文章

  1. git - 简明指南
  2. springboot异步注解_SpringBoot如何实现异步、定时任务?
  3. 深度学习(2)回归问题
  4. oracle ora06576,创建oracle发邮件job导致的故障
  5. 计算属性的setter和getter
  6. 数字图像处理基本原理和常用方法
  7. 云服务器选ssd还是hdd_云服务器区域怎么选?
  8. Linux查看服务器总内存和总硬盘大小
  9. Ajax 滚动异步加载数据
  10. Rhel6服务器日志浅谈
  11. 01_博图默认变量和DB块变量导入昆仑通态触摸屏
  12. Paragon NTFS 15Mac上NTFS分区的必备工具
  13. 【AI应用】NVIDIA Tesla T4的详情参数
  14. Java基础——类与对象
  15. PX4-小型固定翼滑跑起飞问题分析
  16. hdu4565 so easy 矩阵
  17. 关闭windows锁屏,提升开机速度
  18. shopxp商城系统对接个人支付宝免签h5支付
  19. nginx部署访问phpadmin
  20. 《算法分析与设计》复习笔记

热门文章

  1. 10、mybatis中缓存的使用
  2. 20、java中的类加载机制
  3. java各种集合的线程安全
  4. Oracle入门(七)之表空间
  5. 《朝花夕拾》金句摘抄(二)
  6. 用赫夫曼树进行文件的压缩
  7. Hibernate框架(1)
  8. python123测验9程序题_python程序设计实验二
  9. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
  10. java集合——树集(TreeSet)+对象的比较