java - shell 脚本: running a java application and sending command-line args to it via the script?

标签 java shell

这是一个类。我以前从未使用过 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/

相关文章:

java - Vaadin 文本区域已过时

linux - shell脚本函数返回一个字符串

linux - 使用 grep/sed 仅在文件末尾递归删除尾随空格?

java - 使用 PDFBox 将 Type3 字体字符渲染为图像

javascript - 如何在 jSTL + javascript 中使用 foreach?

java - 如何使用:empty pseudo selector in jsoup

python - 使用 Python 子进程处理交互式 shell

shell - 比较两个文件(文件 1 和文件 2),如果两个文件的第一列匹配,则从文件 2 到文件 1 添加一列

linux - 在linux、bash中的单独列中回显2个变量

java - 如何删除Ebean ORM实体属性