背景
在开发的过程中,经常会临时处理些任务需要编写一个脚本,比如shell,python,但是对于只会Java的开发人员(当然不是我)来说,肯定会期待使用Java编写脚本。但是因为Java的语言特性,编写一个Java脚本是非常复杂的,需要导入包,定义类,定义方法。
Java为了让我们轻松的编写脚本都做了哪些?
从Java11开始使用Java写脚本成为可能
其实从Java 11开始,就可以用其写脚本了。
JEP 330: Launch Single-File Source-Code Programs (openjdk.org)
JEP 330(启动单文件源代码程序)中描述到:
Enhance the
javalauncher to run a program supplied as a single file of Java source code, including usage from within a script by means of “shebang” files and related techniques.增强 java 启动器,使其能够运行以单个 Java 源代码文件形式提供的程序,包括通过”shebang”文件和相关技术在脚本中使用。
Hello Wrold示例:
#!/usr/bin/java --source 11
public class Script {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
虽然Java 11是的shebang成为可能,但相比于其他脚本来说,实现过程还是相当繁琐。
现在更加简单
从Java 22开始,JEP 463: Implicitly Declared Classes and Instance Main Methods (Second Preview) (openjdk.org)允许我们省略类的声明,并可以将main函数从public static void main(String[] args)简化为void main。这样会大大降低我们写脚本的成本,因为类的定义和main方法的书写本身就是一个繁琐的、重复的过程。
Hello World示例:
#!/usr/bin/java --source 22 --enable-preview
void main() {
System.out.println("Hello World");
}
在这个JEP的第三次迭代中,Java 23,将会允许使用print(obj)、println(obj)和readln(obj)来代替System.out.println(obj)。