2009-10-20 198 views
2

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

#!/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 

一些google搜索后的内容,我发现(从计算器民间提到),其当Jar使用比JRE更高版本的JDK进行编译时会出现此类错误。

现在奇怪的是,如果我直接在外壳

java -jar umar.jar 

运行此命令时,它工作完全正常。如果jar是使用比我的JRE更高版本的JDK编译的,那么即使从shell也不能运行它。

你有什么建议?

+0

在shell中,键入 'whereis java的' 或 'whereis javac的' 运行jar,并将其与 '回声 “$ JAVA_HOME”' 进行比较。他们应该告诉你通往JRE的路径。 – NawaMan 2009-10-20 02:28:59

回答

4

比较“Java的版本”和“” $ JAVA_HOME“/斌/ Java的版本”

你可能已经安装了多个JVM

1

如前所述 - 你试图使用字节码编译由后来的编译器与旧的jvm。

请注意,如果您PATH包含不同版本的多个Java可执行程序,你可以很容易地使用“-version”键在它们之间切换。

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

0

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

使用导出的Java主

e.g

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