Проект Spring-Maven: неподдерживаемая постоянная ошибка major.minor версии 52.0

Я понижаю версию небольшого приложения с Tomcat 8 / JRE 1.8 до Tomcat 7 / JRE 1.7 по причинам инфраструктуры. Тем не менее, когда я установил JRE на 1.7 и уровень соответствия компилятора на 1.7, я получил эту ошибку при запуске Tomcat 7. Я пробовал все в этомвопрос, безуспешно.

  • Уровень соответствия компилятора: 1,7
  • Целевые среды выполнения: Apache Tomcat v7.0
  • Системная библиотека JRE: jdk1.7.0_80

Фрагмент Maven POM:

  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

Любая помощь была бы достойной. Спасибо.

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/compoT7]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/compoT7]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    ... 6 more
Caused by: java.lang.UnsupportedClassVersionError: org/springframework/web/SpringServletContainerInitializer : Unsupported major.minor version 52.0 (unable to load class org.springframework.web.SpringServletContainerInitializer)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3209)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1373)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1861)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:197)
    at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:158)
    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1579)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1280)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:888)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more

Куда бы я ни посмотрел, ответы связаны с изменением уровня соответствия JRE и компилятора. Тем не менее, вроде бы что-то другое и хитрое.

Alex 22.03.2018 21:51

Какую версию Spring Boot / Spring вы используете?

khmarbaise 22.03.2018 22:15

весна (webmvc, jdbc, orm, data-jpa) 5.0.2.RELEASE

Alex 22.03.2018 22:20

Итак, Spring 5.X - это требование JDK 8, которое является вашей проблемой. См. projects.spring.io/spring-framework. Если вам нравится работать с JDK 7, вам нужно перейти на Spring 4.X ....

khmarbaise 22.03.2018 22:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
2 132
3

Ответы 3

Caused by: java.lang.UnsupportedClassVersionError: org/springframework/web/SpringServletContainerInitializer : Unsupported major.minor version 52.0 (unable to load class org.springframework.web.SpringServletContainerInitializer)

Похоже, что используемая вами версия Spring была скомпилирована на Java 8. Посмотрите на свою версию Spring и проверьте уровень JRE. Возможно, вам придется понизить версию Spring.

Это просто:

Класс org.springframework.web.SpringServletContainerInitializer из зависимости Spring был скомпилирован с 1.8 JDK. Единственное, что вы можете сделать, - это понизить версию зависимостей Spring до версии, скомпилированной с помощью 1.7 JDK.

Если они определены в одном из ваших pom.xml, просто понизьте их версию.

Если это переходная зависимость, отключайте основную зависимость, которая использует меньшую версию Spring

или исключить скомпилированные зависимости 1.8 и явно добавить меньшую версию.

Вы можете использовать подключаемый модуль Enforcer, чтобы определить, какие библиотеки скомпилированы с неправильной версией. Он скажет вам, для каких именно jar-файлов и для какой версии они скомпилированы.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>specifyLatestVersionHere</version>
  <executions>
    <execution>
      <id>jdk-check</id>
      <phase>validate</phase>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <enforceBytecodeVersion>
            <maxJdkVersion>1.7</maxJdkVersion>
          </enforceBytecodeVersion>
        </rules>
        <fail>true</fail>
      </configuration>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>extra-enforcer-rules</artifactId>
      <version>1.0-beta-6</version>
    </dependency>
  </dependencies>
</plugin>

Другие вопросы по теме