当涉及到spring 4.3.20支持的java版本时,我感到困惑。将Spring 4.3.20项目更新到Java 11没有任何问题。我所有的测试都运行良好,web应用程序启动,Spring的所有功能都需要字节码魔术,如@Cacheable
工作。这怎么可能?据我所知,我应该必须更新到Spring5。我在maven设置和生成的.class
文件的字节码版本中检查了语言级别,它们确实使用了主要版本:55
。
我错过了什么?
我用Java 11构建,并用Java 11启动我的本地tomcat。我仔细检查了我的所有设置,并使用visualvm
来验证tomcat是否确实与Java 11一起运行。
以下是javap
的输出:
在社区中,兼容性似乎是一个常见问题,因此在Spring文档中有一个答案:https://spring.io/blog/2015/04/03/how-spring-achieves-compatibility-with-java-6-7-and-8
基本上,Spring代码库本身甚至不使用Java 7的特性,因此它与6兼容。
至于字节码转换,我相信JVM保持了一定程度的兼容性,因为它的规范允许框架的一些特性工作。
但是,如果官方文档说它不兼容,那么您应该依靠这个事故,因为其他功能可能无法工作或因补丁和小版本而损坏。
附言:您还提到了可用于操纵字节码的cglib
,但实际上并不是必需的。它确实会生成 Java 代码甚至字节码,这些代码在新的 JVM 发行版中始终向后兼容。
记住:测试只能证明bug的存在,而不是它们的缺失。
根据他们发布博客上的一些评论,4.3.20实际上与Java 11“不兼容”。
另一方面,spring是一个巨大的框架。因此,简单的答案可能是:只要你不遇到不起作用的领域,它就会起作用。
请记住:版本N的任何JDK都可以为具有旧版本N-x的字节码运行字节码
Spring5.1支持Java11,但早期版本不支持。请参阅Spring框架版本:
以及Spring Framework 5. x的新功能:
4.3. x在Java11上工作可能只是意味着你到目前为止很幸运(没有使用与Java11不兼容的东西)。此外,Java在向后兼容性方面相当不错,即使自Java9以来删除了东西或故意向后不兼容的更改,Spring中真正损坏的东西也完全有可能非常小和模糊。
也就是说,如果作者说Java兼容性只能在比您使用的版本更高的版本中得到保证,我不会在Java 11中使用像Spring这样庞大的库。如果您想将Spring与Java 11一起使用,请升级到Spring 5.1。
我有两个版本的oracle,oracle Database 11g Enterprise Edition 11.2.0.1.0版本-生产版和oracle Database 11.g Enterprise Edition版本11.2-0.3.0版本-64位生产版 我有这个sql: 它适用于11.2.0.1.0,但在11.2.0.3.0上,我收到此错误: 我能做些什么来解决这个问题? 感谢。
我的谷歌登录非常适合调试变体。但是当我尝试构建发布变体时,它停止工作......我提到了这个答案,但就我而言,我还没有上传到我的应用程序到Play商店。那么在这种情况下,我如何获得新的 sha1 密钥呢?
可能重复: 为什么“[]==False”在“if not[]”成功时计算为False? 我是新的python作为每个三元运算符的python 我希望下面的代码输出为[],因为[]不等于零 如果我错了,请改正 谢谢你,赫玛
问题内容: 有序词典是非常有用的结构,但是不幸的是,它们仅在3.1和2.7版本中才是最近的版本。在旧版本中如何使用有序词典? 问题答案: 我在pip python 2.6上安装了ordereddict
我正在将tomcat服务器从tomcat7升级到Tomcat8。但Struts1.1似乎不能在Tomcat8上工作。有人知道Tomcat8不支持Struts1.1吗。 下面是堆栈跟踪
带Spring2.1.3。版本,H2集成测试运行良好。 以下是配置 应用程序属性: 配置类: 引导: 将Spring boot版本升级到2.3.12.release.后,上述配置停止工作 我们看到的错误是 原因:组织。h2.jdbc。JdbcSQLSyntaxErrorException:未找到表“USERPROFILE”;SQL语句:插入userProfile。。。。。 当测试用例开始时,下面是