JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs (original) (raw)

Peter Levart peter.levart at gmail.com
Tue May 22 14:43:46 UTC 2018


Hi,

If this JEP added a feature that specifying source file name as "-" would read STDIN as the Java source file, one could write executable scripts in the following "hybrid" way:

#!/bin/bash

exec /path/to/java - $* <<EOF

public class Hello {     public static void main(String[] args) {         System.out.println("Hello world");     } }

EOF

Notice that this does not need shebang support from java launcher. The benefit of this approach would also be that /path/to/java could be computed by the bash script prefixing the Java source. Java typically does not have a standard installation "place" like bash, so shebang scripts with hard-coded java path would be less portable as bash scripts. Of course one could do something similar with the following trick (using support for shebang in java launcher):

#!/bin/bash //bin/true; JAVA_HOME= exec JAVAHOME/bin/javaJAVA_HOME/bin/java JAVAHOME/bin/java0 $*

public class Hello {     public static void main(String[] args) {         System.out.println("Hello world");     } }

..but this still needs shebang support and script author is forced to use a special prefix in each line of bash script prefixing the java source:

//bin/true; ... //bin/true; .... //bin/true; ...

Support for "-" STDIN source in java launcher does have one drawback. Scripts written this way can not process STDIN passed to the script as STDIN of java launcher is redirected to obtain Java source.

Regards, Peter



More information about the jdk-dev mailing list