【问题标题】:How to launch single-file programs in Java 11 (or later)?如何在 Java 11(或更高版本)中启动单文件程序?
【发布时间】:2018-08-20 17:16:49
【问题描述】:

JEP 330 描述了 JDK 11 中用于在 Java 中启动单文件程序的新功能。我试过了:

$ ./Example.java

但它不起作用。正确的用法是什么?

【问题讨论】:

标签: java java-11


【解决方案1】:

短版:

$ java Example.java data.txt

或(#!):

$ ./example data.txt

详情:

工作示例here。

考虑一个单文件程序来打印文件中的行:

import java.nio.file.*;
import java.util.stream.Stream;

public class ExampleJDK11 {
    public static void main(String[] args) throws Exception {
        // snip ... print file args[0]
    }
}

用法一:

假设代码在Example.java 中并且java 在PATH 上,那么用法是:

java Example.java data.txt

  • 请注意,没有javac 步骤(!)
  • 请注意,文件名不必与类名匹配。

用法2:

假设代码在文件example 中,顶部有一个“shebang”行:

#!/Users/measter/tools/jdk-11.jdk/Contents/Home/bin/java --source 8 

import java.nio.file.*;
import java.util.stream.Stream;
// as above

用法是:

./example data.txt

【讨论】:

    【解决方案2】:

    虽然answer by you 包含正确的信息。只是想把它更简单地说,一个文件可以简单地使用从 JDK11 开始的java 执行,例如在 MacOS 上

    .../jdk-11.jdk/Contents/Home/bin/java Sample.java
    

    这将寻找并执行标准的 public static void main(String[] args) 方法。可以注意到(即使是初学者)这种方法接受 String 类型的 args,因此放置在原始命令行中源文件的名称之后的参数将传递给编译的类执行时。因此下面的命令

    .../jdk-11.jdk/Contents/Home/bin/java <file-name>.java arg1 arg2
    

    将在执行阶段提供字符串参数arg1、arg2。

    旁注 - 如果文件包含多个具有标准主方法的类,则在源文件中找到的第一个顶级类应包含标准的声明public static void main(String[])方法被执行。

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多