无法在 ubuntu 中执行 java class 文件
Not able to execute the java class files in ubuntu
我是 java 的新手。我开始在 ubuntu 64 位机器上安装 oracle java 并设置 CLASS_PATH
export JAVA_HOME=/usr/lib/java/jdk1.8.0_40
set PATH="$PATH:$JAVA_HOME/bin"
如果我在终端中输入以下命令 java -version
,它会显示 1.8 oracle java 和 javac -version
javac 1.8.0_40
然后我创建了一个 java 文件,我能够编译和执行该文件。现在我安装了tomcat7。现在如果我输入 java -version
它会显示
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1~0.13.10.1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
和 javac -version
javac 1.8.0_40
但现在我可以编译我之前编译的 java 文件和 运行 之前的文件,但我无法执行该文件。它说以下错误..
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 791289926 in class file TestBean
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
由此我可以理解javac 是1.8(oracle) 和java 是1.7(openjdk)。现在我需要配置为 java 1.8(oracle)。我将如何做?另外,如果我在执行 java [=55 时给 oracle jre 完整路径 (/usr/lib/java/jdk1.8.0_40/jre/bin/java) =] 正在执行的文件。如果有人知道解决方案请给我......
再次更改您的 Java_Home,如下所示:
export JAVA_HOME=/usr/lib/java/jdk1.8.0_40/bin/java
您需要使用相同的 java 版本编译 .class 文件和 运行 它。因此,在您的情况下,再次编译 .class 文件并尝试 运行 它,应该可以。
这就是为什么当您使用完整的 javac 路径编译文件时它可以工作的原因。混合 JDK 和 JRE 版本不是一个好主意。
你真的设置了CLASS_PATH变量吗?除非你有一个非常具体的原因,否则你应该取消它,如果你不知道你在做什么,它会导致问题。
为了配置在 Ubuntu 上使用哪个 JDK,您应该使用:
sudo update-alternatives --config java
如 Java 的 Ubuntu 帮助页面中所述 - https://help.ubuntu.com/community/Java
在 /etc/profile 中设置您的 class 路径
导出 JAVA_HOME=/usr/lib/java/jdk1.8.0_40
导出路径=$路径:$JAVA_HOME/bin
我是 java 的新手。我开始在 ubuntu 64 位机器上安装 oracle java 并设置 CLASS_PATH
export JAVA_HOME=/usr/lib/java/jdk1.8.0_40
set PATH="$PATH:$JAVA_HOME/bin"
如果我在终端中输入以下命令 java -version
,它会显示 1.8 oracle java 和 javac -version
javac 1.8.0_40
然后我创建了一个 java 文件,我能够编译和执行该文件。现在我安装了tomcat7。现在如果我输入 java -version
它会显示
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1~0.13.10.1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
和 javac -version
javac 1.8.0_40
但现在我可以编译我之前编译的 java 文件和 运行 之前的文件,但我无法执行该文件。它说以下错误..
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 791289926 in class file TestBean
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access0(URLClassLoader.java:71)
at java.net.URLClassLoader.run(URLClassLoader.java:361)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
由此我可以理解javac 是1.8(oracle) 和java 是1.7(openjdk)。现在我需要配置为 java 1.8(oracle)。我将如何做?另外,如果我在执行 java [=55 时给 oracle jre 完整路径 (/usr/lib/java/jdk1.8.0_40/jre/bin/java) =] 正在执行的文件。如果有人知道解决方案请给我......
再次更改您的 Java_Home,如下所示:
export JAVA_HOME=/usr/lib/java/jdk1.8.0_40/bin/java
您需要使用相同的 java 版本编译 .class 文件和 运行 它。因此,在您的情况下,再次编译 .class 文件并尝试 运行 它,应该可以。
这就是为什么当您使用完整的 javac 路径编译文件时它可以工作的原因。混合 JDK 和 JRE 版本不是一个好主意。
你真的设置了CLASS_PATH变量吗?除非你有一个非常具体的原因,否则你应该取消它,如果你不知道你在做什么,它会导致问题。
为了配置在 Ubuntu 上使用哪个 JDK,您应该使用:
sudo update-alternatives --config java
如 Java 的 Ubuntu 帮助页面中所述 - https://help.ubuntu.com/community/Java
在 /etc/profile 中设置您的 class 路径 导出 JAVA_HOME=/usr/lib/java/jdk1.8.0_40 导出路径=$路径:$JAVA_HOME/bin