我有一个使用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构建的事实时,如何解决此问题?
答案 0 :(得分:1)
UnsupportedClassVersionError ...当您具有在更高版本的Java中构建的库并且想要在运行于较低版本的应用程序中使用时,发生次要错误。因此,有两种可能的解决方案。
答案 1 :(得分:0)
这实际上取决于库使用Java8 JVM功能的程度。您可以尝试在库中使用诸如Retrolambda之类的Retrorlanslator。 https://github.com/luontola/retrolambda
检查Can Java 8 code be compiled to run on Java 7 JVM?中的讨论
在现有服务器或JVM上进行新服务器升级可以更好地利用您的时间。