java - 如何在可执行的 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 文件中指定的正确方法是什么?
解决方案
推荐阅读
- vba - 在通讯录宏中查找替换
- sql - 基于 SQL 中的 where 条件,不同时间的相同执行时间?我该如何解决?
- oauth - 身份服务器和身份提供者有什么区别?
- php - 如何使用 Doctrine 删除/调试多行?
- c++ - 在 cURL 上使用 Telegram Bot 发送图像
- flutter - 如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用
- postgresql - 在 postgres SQL 中将行视为列而不使用交叉选项卡,因为交叉选项卡正在提供异常结果
- r - 在 e_visual_map 函数中添加千位逗号分隔符(echarts4r 包)
- reactjs - Is there a way to prevent redirection after form submission and still send the form data to the server?
- android - adb (windows 8.1) 找不到我的设备 (honor 8x)