1

我有一个用 Java 7 构建的项目(项目 pom 摘录):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

它依赖于一个用 Java 8 构建的模块(依赖 pom 摘录):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

我已在运行 Java 7 的服务器上部署并运行我的应用程序,但出现此错误:

java.lang.UnsupportedClassVersionError: com/h/i/c/u/e/TradeStatus : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.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:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getDeclaredMethods(Class.java:1808)
at ...

知道我无法更改服务器上的 JRE,并且我无法更改模块是用 Java 8 构建的事实,我该如何解决这个问题?

4

2 回答 2

1

UnsupportedClassVersionError ... Major Minor 当您有一个内置在较高版本的 java 中的库并且您想在以较低版本运行的应用程序中使用时发生。所以有两种可能的解决方案。

  • 首先在所需版本的 JDK 中使用代码更改构建库
  • 升级您的 JDK 版本,以便库和您的应用程序都能正常工作。
于 2019-05-16T14:36:49.127 回答
0

这实际上取决于该库在多大程度上使用了 Java8 JVM 功能。您可以尝试在库中使用 Retrorlanslator,例如 Retrolambda。https://github.com/luontola/retrolambda

检查Java 8 代码可以编译以在 Java 7 JVM 上运行中的讨论吗?

在现有服务器上升级新服务器或 JVM 可以更好地利用您的时间。

于 2019-05-16T14:46:23.443 回答