【问题标题】:Java 8 Spring compatibilityJava 8 Spring 兼容性
【发布时间】:2015-08-28 19:56:09
【问题描述】:

我目前正在将我的应用程序从 Java 7 迁移到 Java 8,并且目前我正在运行 Spring 3.1.6 jar。 这会与 Java 8 兼容还是我需要升级 Spring jar?

我知道 Spring 4x 版本自然支持 Java 8,但这是时间紧迫的,我正在寻求尽可能少地更改 jar。

【问题讨论】:

标签: spring java-8


【解决方案1】:

基本上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,根据 lambdas 的需要); 为此请升级到Spring Framework 4.0

关注this链接到源文章。

【讨论】:

  • 是的,就是这样!如果你在 JDK 7 上编译,你可以在 JRE 8 上运行,但你需要 Spring 的 3.2.1.RELEASE 版本
  • 我已经迁移到 JDK8,同时使用 spring 3.2.9 和目标运行时 1.8。到目前为止,我还没有遇到任何问题。
【解决方案2】:

不,它不兼容。我也遇到过同样的问题,虽然很多人会说 Java 8 完全向后兼容旧版本的 Java,但事实证明并非如此。

这很好地解释了我使用 java 8 遇到 java 7 目标代码的确切问题。

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

因为 ConcurrentHashMap 的 API 在 2 个 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)

【讨论】:

    【解决方案3】:

    如果某些库(或 JRE 本身)是 JDK 8 并且启用了 spring 的组件扫描功能(并扫描这些库/jdk 类),那么最小的 spring 版本是 3.2.10-RELEASE。

    原因是spring升级了ASM(spring用来扫描编译的类和检测注解、实现的接口等的库)。

    详情请参阅SPR-11979SPR-11656

    【讨论】:

    • 当我将旧应用程序从 3.2.2-RELEASE 升级到 3.2.18.RELEASE 时效果很好
    【解决方案4】:

    Java 8 和 jvm 8 完全向后兼容所有旧版本的 java。 Java 采取了艰苦的步骤来确保新版本不会破坏旧代码。你为 java 7 编写的任何代码都可以用 java 8 编译,你为 java 7 编译的任何代码都可以在 jvm 8 上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多