以后再编译JDK是否安全?

时间:2016-09-15 06:57:30

标签: java

我有一些在Java 6上运行的大项目。但我计划在Java 8中开始构建它们,因为许多构建工具已经从Java 6中移除。

使用Java 8简单地编译它们然后将它们部署在运行Java 8的Web容器中是否安全?如果没有,有什么考虑因素?

仅供参考,他们没有适当的自动化测试套件。

3 个答案:

答案 0 :(得分:2)

通常应该是,因为大多数功能都是向后兼容的。但是,没有保证。在开始生产之前,请按照正确的流程进行测试。

对于web容器,使用jdk,版本也会发生变化。这可能会导致一些问题,具体取决于软件供应商以及您从容器中使用的所有服务(JNDI,连接池等)。我曾经在将应用程序迁移到更高版本的JDK时出现问题。我们还升级了Websphere。我们使用的是JSF,更高版本的WAS包含了JSF jar,这与我们的应用程序罐发生冲突。

您的应用可能正在使用许多可能受影响的第三方库。同样,大多数情况下你应该没问题,但可能存在小问题。在不知道您的应用程序的情况下,我只建议迁移和测试以确认。

答案 1 :(得分:2)

问题可能与:

有关
  

平台行为的某些方面是故意未指定的,底层实现可能会在平台版本中发生变化。

  • Web容器的配置,可以与支持java 6的版本和支持java 8的版本
  • 不同
  • 在从java 6到java 8的过程中发生变化的外部库,删除旧方法,使代码无法编译

所以是的,从java 6到java 8的过程可能会破坏你的代码。

但如果编译代码,则确定代码的行为是相同的,因为通常(但并非总是)授予了复古兼容性。您可以确定只在java 6和Java 8版本上运行完整的单元测试集。

这里有一些java 6和java 7之间不兼容的例子:

JDK-6527962退出非标准软件包com.sun.image.codec.jpeg。如果您的代码使用此软件包,则无法在java 8上编译

JDK-6563734 Path2D.Float和Path2D.Double应该有最终的getPathIterator方法如果你的代码ovewrite声明final的方法,代码将无法编译传递给java 8

这是incompatibilities between java 6 and java 7

的完整正式列表

这是incompatibilities between java 7 and java 8

的完整正式列表

答案 2 :(得分:0)

你需要非常彻底地测试。如果存在错误,那么在进入下一个版本之前,必须找到并修复它们。如果你有一个阳光灿烂的日子,并且没有来自升级的错误,那么至少你在测试后肯定知道。

但是,您需要知道要关注什么。您需要了解version 7version 8上应用的更改。