【问题标题】:Running a jar from shell script从 shell 脚本运行 jar
【发布时间】:2010-12-08 04:58:52
【问题描述】:

我在 /root/umar/bin 目录中有一个名为 umar.jar 的 jar 文件。我在同一目录中有一个 shell 脚本文件 run.sh。以下是run.sh的内容

#!/bin/bash
"$JAVA_HOME"/bin/java -jar /root/umar/bin/umar.jar

现在当我运行 shell 脚本时,我得到以下错误

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

经过一番谷歌搜索后,我发现(正如 stackoverflow 中的一位人士所说),当 Jar 使用比您的 JRE 更高版本的 JDK 编译时会发生此类错误。

现在奇怪的是,如果我直接在 shell 上运行这个命令

java -jar umar.jar

它工作得很好。如果 jar 是用比我的 JRE 更高版本的 JDK 编译的,那么即使从 shell 也不应该运行它。

你有什么建议?

【问题讨论】:

  • 在 shell 中,输入 'whereis java' 或 'whereis javac' 并将其与 'echo "$JAVA_HOME"' 进行比较。他们应该告诉你 JRE 的路径。

标签: java linux shell scripting jar


【解决方案1】:

导出你需要在你的sh文件中使用的java和jre home。

使用导出的 java home 运行 jar

例如

export JAVA_HOME=/opt/java6
export JRE_HOME=/opt/java6/jre
/opt/java6/bin/java -Xms2048m -Xmx2048m -jar abc.jar $1

【讨论】:

    【解决方案2】:

    如前所述 - 您正在尝试使用由后期编译器与旧 jvm 编译的字节码。

    请注意,如果您的 PATH 包含多个不同版本的 java 可执行文件,您可以使用 '-version' 键在它们之间轻松切换。

    假设您的 PATH 中有 java5 和 java6,并且 java5 位于 java6 之前。您可以看到默认使用java5(如果您执行'java -version'它会打印相应的信息)。但是,您可以使用 'java -version:1.6 ...' 之类的命令轻松启动 java6(例如,如果您执行 'java -version:1.6 -version' 您会看到使用java6)。

    【讨论】:

      【解决方案3】:

      比较 "java -version" 和 ""$JAVA_HOME"/bin/java -version"

      您可能安装了多个 JVM

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多