有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您需要告诉java在何处查找您的类(使用-cp)——可以在目录中,也可以在数据库中。罐子

    要查找脚本所在的目录(与启动脚本的位置相反),可以使用:$(dirname $0)

    例如:

    #!/bin/bash
    
    JVM=java
    JVM_OPTS="-Xmx1024m"
    
    $JVM $JVM_OPTS -cp $(dirname $0)/myapp.jar A1 "$@"
    

    明确说明你想要的外壳是个好主意。还要注意转义参数所需的$@周围的引号