首页 > 解决方案 > 如何在可执行的 java shebang 文件中指定类路径

问题描述

我试图评估使用 Java 和库编写脚本的可行性。因此,我尝试在指定类路径的同时启动并运行 java shebang 文件。

环境

jar我的工作目录中有 2 个脚本和一个:

user@host:/tmp/tmp.nhRfqSWEWt$ ls -l
total 144
-rw-r--r-- 1 user user 136837 Apr 13 22:51 public-api-java-jar-with-dependencies.jar
-rwxr-xr-x 1 user user    256 Apr 13 22:52 test_with_cp
-rwxr-xr-x 1 user user    201 Apr 13 22:53 test_without_cp

JVM如下:

user@host:/tmp/tmp.nhRfqSWEWt$ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

工作案例

第一个脚本test_without_cp按预期工作,代码在运行时执行./test_without_cp

user@host:/tmp/tmp.nhRfqSWEWt$ cat test_without_cp 
#!/usr/lib/jvm/java-11-openjdk-amd64/bin/java --source 11

public class HelloJavaScripts {

    public static void main(String[] args) {
        System.out.println("Hello, Java scripts!");
    }

}

user@host:/tmp/tmp.nhRfqSWEWt$ ./test_without_cp 
Hello, Java scripts!

错误案例

但是,当我尝试指定 a 时--class-path,我得到一个错误并且代码没有被执行:

user@host:/tmp/tmp.nhRfqSWEWt$ cat test_with_cp 
#!/usr/lib/jvm/java-11-openjdk-amd64/bin/java --class-path public-api-java-jar-with-dependencies.jar --source 11

public class HelloJavaScripts {

    public static void main(String[] args) {
        System.out.println("Hello, Java scripts!");
    }

}

user@host:/tmp/tmp.nhRfqSWEWt$ ./test_with_cp 
Unrecognized option: --class-path public-api-java-jar-with-dependencies.jar --source 11
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

试错

我很确定--source必须排在最后,但无论如何我都试图改变参数的顺序:

user@host:/tmp/tmp.nhRfqSWEWt$ cat test_with_cp 
#!/usr/lib/jvm/java-11-openjdk-amd64/bin/java --source 11 --class-path public-api-java-jar-with-dependencies.jar

public class HelloJavaScripts {

    public static void main(String[] args) {
        System.out.println("Hello, Java scripts!");
    }

}

user@host:/tmp/tmp.nhRfqSWEWt$ ./test_with_cp 
Error: Could not find or load main class ..test_with_cp
Caused by: java.lang.ClassNotFoundException: //test_with_cp

问题

--class-path在 Java shebang 文件中指定的正确方法是什么?

标签: javajava-11shebangjava-shebang

解决方案


推荐阅读