79

我最近卸载了 Java 8,以使用 Java 6,因为我希望我的代码/创作能够被更多人使用,而不仅仅是那些使用 Java 8 的人。当我这样做时mvn - version,它会返回:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

当我这样做时java -version

java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

Java 似乎一切都很好,但是当我尝试运行可执行 JAR 时也会发生这种情况。我通过手动执行 java -jar (jar name) 来解决它

4

8 回答 8

105

根据maven 网站,支持 Java 6 的最后一个版本是 3.2.5,3.3 及更高版本使用 Java 7。我的预感是您使用的是 Maven 3.3 或更高版本,并且应该升级到 Java 7(并设置正确的源/target 属性)或降级 maven。

于 2015-07-13T22:24:15.510 回答
12

该版本号 (51.0) 表明您正在尝试运行为 Java 7 编译的类。您需要为 Java 6 重新编译它们。

但是请注意,某些功能可能不再与 Java 6 兼容,Java 6 已经很老了,Oracle 不再(公开)支持。

于 2015-07-13T22:22:45.400 回答
5

我也面临类似的问题。我可以通过在 Windows 的环境变量中设置 JAVA_HOME 来解决这个问题。在这种情况下,在批处理文件中设置 JAVA_HOME 不起作用。

于 2016-01-03T11:25:19.723 回答
2

我遇到了同样的问题。我使用 jdk 1.8 和 maven 3.3.9 导出 JAVA_HOME 后,我没有看到这个错误。导出 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/

于 2017-04-25T15:22:07.677 回答
2

问题是因为您没有正确设置JDK版本。您应该将jdk 7用于主要编号51。像这样:

JAVA_HOME=/usr/java/jdk1.7.0_79

于 2016-12-20T12:17:12.487 回答
0

在 JAVA_HOME 和路径添加 jdk8 或更高版本。

添加 JAVA_HOME 添加 C:\ProgramFiles\Java\jdk1.8.0_201

对于路径 =>

添加 %MAVEN_HOME%\bin

最后重新启动你的电脑。

于 2019-11-07T12:54:18.893 回答
0

我遇到了同样的问题,并通过在我的 Ubuntu 机器(16.04)中添加带有更新版本的 java 的 JAVA_HOME 变量来解决。如果您使用的是“Apache Maven 3.3.9”,您需要使用 java7 或更高版本升级您的 JAVA_HOME

执行此操作的步骤

1-sudo vim /etc/environment

2-JAVA_HOME=JAVA安装目录(MyCase-/opt/dev/jdk1.7.0_45/)

3-Run echo $JAVA_HOME 将给出 JAVA_HOME 设置值

4-现在 mvn -version 将给出所需的输出

Apache Maven 3.3.9

Maven home: /usr/share/maven

Java version: 1.7.0_45, vendor: Oracle Corporation

Java home: /opt/dev/jdk1.7.0_45/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "4.4.0-36-generic", arch: "amd64", family: "unix"
于 2016-10-25T12:05:05.073 回答
0

正如 John Ament 所说,Java 6 中只能使用 maven 版本 3.2.5 或更低版本。否则,如果您想让应用程序(在本例中为 JAR)与 maven 兼容 Java 6,则可以使用 Java 8,但在 pom.xml 文件中将字段java.version或目标设置为 1.6。

如果你想创建兼容 Java 6 的 Spring fat jar,你可以将它添加到你的 pom.xml 中:

<properties>
    <java.version>1.6</java.version>
</properties>

至于spring fat jar app,你需要将tomcat设置为tomcat-juli:7.0.59或排除整个tomcat,否则会报错。

于 2022-01-11T03:17:19.593 回答