Неподдерживаемая версия major.minor 52.0 из-за зависимости - PullRequest
1 голос
/ 16 мая 2019

У меня есть проект, построенный на Java 7 (выдержка из проекта):

<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?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

UnsupportedClassVersionError ... Major Minor происходит, когда у вас есть библиотека, встроенная в более высокую версию Java, и вы хотите использовать ее в своем приложении, которое работает в более низкой версии.Таким образом, есть два возможных решения.

  • Сначала соберите библиотеку с изменениями кода в требуемой версии JDK
  • Обновите версию JDK, чтобы и библиотека, и ваше приложение работали.
0 голосов
/ 16 мая 2019

Это действительно зависит от того, в какой степени библиотека использует функции Java8 JVM. Вы можете попробовать использовать ретрорланслатор, такой как Retrolambda, в библиотеке. https://github.com/luontola/retrolambda

Проверка обсуждений в Можно ли скомпилировать код Java 8 для запуска на Java 7 JVM?

Новый сервер или обновление JVM на существующем намного лучше используют ваше время.

...