Совместимость с Java 8 Spring

В настоящее время я перевожу свое приложение с Java 7 на Java 8, и в настоящее время я использую jar Spring 3.1.6. Будет ли это совместимо с Java 8, или мне нужно обновить Spring jar?

Я понимаю, что версия Spring 4x имеет естественную поддержку Java 8, но это критично ко времени, и я стараюсь менять как можно меньше банок.

4 ответа

В принципе Spring 3.x версия поддерживает до Java-7 только. Если вы хотите перейти на Java-8 ты должен использовать Spring 4.x версия.

Однако некоторые весенние заметки о выпуске говорят, что Spring Framework 3.2.x будет поддерживать развертывание на JDK 8 время выполнения для приложений, скомпилированных против JDK 7 (с -target 1.7) или ранее. Обратите внимание, что он не будет поддерживать JDK 8 формат байт-кода (-Target 1.8, как необходимо для лямбда-символов); пожалуйста, обновите до Spring Framework 4.0 для этой цели.

Перейдите по этой ссылке на исходную статью.

Если некоторые библиотеки (или сама JRE) - это JDK 8 и включена функция сканирования компонентов в Spring (и сканирует эти классы libs/jdk), то минимальная версия spring - 3.2.10-RELEASE.

Причина заключается в обновлении ASM (библиотеки, которую Spring использует для сканирования скомпилированных классов и обнаружения аннотаций, реализованных интерфейсов и т. Д.) Весной.

Подробнее см. SPR-11979 и SPR-11656.

Нет, это не совместимо. Я столкнулся с той же проблемой, и хотя многие скажут, что Java 8 полностью обратно совместима со старыми версиями java, оказывается, что это не так.

Это очень хорошее объяснение точной проблемы, с которой я столкнулся с целевым кодом Java 7 с Java 8.

https://gist.github.com/AlainODea/1375759b8720a3f9f094

Поскольку API ConcurrentHashMap изменился между двумя выпусками Java, весенние каникулы при запуске, и вы в конечном итоге

SEVERE: Context initialization failed
java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
    at org.apache.catalina.core.ApplicationContext.getInitParameterNames(ApplicationContext.java:368)
    at org.apache.catalina.core.ApplicationContextFacade.getInitParameterNames(ApplicationContextFacade.java:367)
    at org.springframework.web.context.support.WebApplicationContextUtils.registerEnvironmentBeans(WebApplicationContextUtils.java:201)
    at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.postProcessBeanFactory(AbstractRefreshableWebApplicationContext.java:163)

У меня не было выбора, кроме как перейти на Spring 4.x (не уверен, что 3.2 или выше сработали бы, когда я прыгнул прямо на 4.x)

Java 8 и JVM 8 полностью обратно совместимы со всеми старыми версиями Java. Java предпринимает кропотливые шаги, чтобы гарантировать, что новые выпуски не сломают старый код. Любой код, написанный для java 7, может быть скомпилирован с использованием java 8, а любой код, скомпилированный для java 7, может быть запущен на jvm 8.

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