这是一个类。我以前从未使用过 shell 脚本,但说明是编写一个运行我的 java 程序的脚本(该程序已经全部设置为接受命令行参数(至少一个参数,以及可选的第二个参数))。我应该能够像这样运行它:
./script.sh arg1 arg2
但是当我这样做时,我收到以下错误(我的 java 主类名称是 A1):
Exception in thread "main" java.lang.NoClassDefFoundError: A1/class
Caused by: java.lang.ClassNotFoundException: A1.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: A1.class. Program will exit.
这就是我的 shell 脚本现在的样子:
#!/bin/sh
java -Xmx1024m A1.class $@
感谢任何帮助。
最佳答案
您需要告诉 java 在哪里查找您的类(使用 -cp
) - 在目录或 .jar 中
要查找脚本所在的目录(而不是启动脚本的目录),您可以使用:$(dirname $0)
。
例如:
#!/bin/bash
JVM=java
JVM_OPTS="-Xmx1024m"
$JVM $JVM_OPTS -cp $(dirname $0)/myapp.jar A1 "$@"
明确您想要的 shell 是个好主意。另请注意 $@
周围的引号,这是转义参数所需的。
关于java - shell 脚本: running a java application and sending command-line args to it via the script?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154832/