有些人运行技术的尖端-更新某一天的东西被更新。在生产中,这是不合适的。
关于当前(Java 7)版本是否已经准备好生产的研究产生了大量可能不再正确的旧材料(在撰写本文时,Java 7已经发布了一年半,这似乎相当长)。
我需要考虑哪些因素才能确定将生产环境升级到更高版本的Java是否合适?
发布于 2013-01-17 22:46:37
首先要问的问题是:“机器上支持Java版本吗?”虽然更新JRE是一回事,但底层操作系统可能不支持运行新版本的Java (支持的认证和支持契约等等,这是许多企业环境所喜欢的)。
许多java生产环境实际上都运行在应用程序服务器之上。这将是下一个考虑因素。Java应用服务器的维基百科比较显示了Java的支持版本。在Oracle的JavaEE兼容性概述中可以进一步看到这一点。JBoss企业应用平台6的测试配置是针对JavaSE6.0UPDATE 6u30的。JavaSE6.0更新6u30也是JBoss应用服务器7.1.0终版的测试配置。这些可能在Java 7中有效,但它们不是经过测试的配置。
在应用程序服务器上展开时,有一些活动代码分析工具,用于事后进行调试。全知调试器 (另见)和Dynatrace就是这方面的两个例子。这些应用程序的工作方式是对运行的java的活动字节代码进行检测(修改),以便向其报告。由于这些应用程序通过修改字节代码来工作,如果字节代码以它们无法使用的方式更改(例如在新的JRE中),它们将无法工作。
接下来是框架。这方面的一个例子是java附带的JAXB和使用它的Spring。更改为Java 7,更新后的JAXB生成与某些框架不兼容的代码(这需要更新它们,并且它们的依赖关系需要更新.)。
下一个列表是构建工具。我们需要确保构建环境使用的是适当版本的Java。为Java 7编写代码,但不更新Maven或Ant使用的版本,就会导致问题。有时,构建工具本身与一个版本紧密地结合在一起,并带有特定的插件。
测试工具。PMD、findbug和校验样式等东西可能无法识别新版本的Java中的新结构--它们可能会与字符串开关语句或复合捕获非常混淆。进入检测的工具,如代码覆盖率,在新JVM中可能无法工作。在Java 7的上下文中,Cobertura和Emma尚未更新到新的JRE (同样,这些应用程序修改字节代码以查看运行的代码和不运行的代码)(请参见jdk7 7的开放源代码覆盖率库)。这可能需要对构建脚本进行更改,以便从一个脚本切换到另一个脚本。
还有IDE。需要将IDE更新为知道语言中的新结构的版本。Eclipse的宣布对Java 7的支持显示了这些问题。
最后,当然也是同样重要的是开发人员。应该由开发人员编写新代码,并了解如何对代码进行重组。从Java1.4到1.5,引入了模板和注释,开发人员需要时间才能进入可用新结构的思维模式。同样,集合在1.2中返工,使开发人员不再使用HashTable和Vector。在更新版本的同时,还应对新的语文结构进行一定程度的培训。
https://softwareengineering.stackexchange.com/questions/183982
复制相似问题