Shell脚本:运行java应用程序并通过脚本向其发送命令行参数?
这是为了上课。我以前从未使用过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 $@
感谢您的帮助
# 1 楼答案
您需要告诉java在何处查找您的类(使用
-cp
)——可以在目录中,也可以在数据库中。罐子要查找脚本所在的目录(与启动脚本的位置相反),可以使用:
$(dirname $0)
例如:
明确说明你想要的外壳是个好主意。还要注意转义参数所需的
$@
周围的引号