2016-03-09 223 views
0

我知道类似的问题已经得到解答,但是我有一个具体的问题,如果有人能够抛出一些光芒,那么这将是一件好事。 我正尝试将几个应用程序(使用Swing的桌面应用程序)迁移到Java版本8.目前用于编译以及运行的版本是6.Java版本升级到8

有大量的第三方API(其中不再受支持)使用这两个应用程序使用JDK 5编译。

我打算使用JDK 8编译应用程序,但为了避免任何更复杂(和返工)想保留第三方API,因为它是(在版本5上编译),即使我的确有API的完整源代码。

您认为这是一个好主意,我需要注意哪些问题。

编辑:

精确我qustion在这里 - 考虑到了Java 5和Java 8之间的通行的行为和源incompatiblities,是否有可能和实际上可能是一个API与版本的5部作品与JRE 8完美的罚款编译,但我试着用JDK 8重新编译它,它会失败并出现编译错误?

在此先感谢

+1

我以为你说过你有一个>>具体的<<问题......叹气。 –

+0

我确实有一个具体的问题。问题是,如果我只保留我的第三方API(在第5版上编译)并在JRE8中运行它,以便使用Java 8重新编译它们,那么在时间/工作方面是否有优势 - 我是否期望运行陷入困境。我确实有API的源代码,但不知道代码,这意味着任何源代码修改都会带来风险。 – Abby

+0

这是一个非特定的问题。 –

回答

1

通常旧代码在新的JVM上运行没有问题。

只有极少数例外需要考虑。 它们在java 8 compatibility guide中列出。

每个不兼容性都与一个数字一起列出。

如在类Collection一例removeAll具有不同的行为,如果你在Java 8传递空参数:

RFE 7131459

区域:核心利布斯/ java.util.Collections中内容提要以前的 版本中,Collection.removeAll(Collection)和 的某些实现如果 集合本身为空,retainAll(Collection)将默默忽略空参数。从此版本开始,如果作为参数 提供null,则集合将始终引发NullPointerException。

不相容性质的行为

如果你的代码,拥有一套完整的单元测试,你可以使用Java 8的JRE运行和检查,他们没有失败。如果单元测试的覆盖率已经完成,那么您确信升级到java 8将不会有问题。

+0

我听起来很愚蠢,但这是否意味着我可以使用JDK 8编译我的应用程序,但保留其他依赖项(第三方API)使用5编译,并且它通常应用于JRE 8? – Abby

+0

是的,你可以。通常它会发生在较老的库中 –

+0

你认为用JDK 8重新编译较旧的库是一个更好的主意吗? (我拥有所有这些库的源代码) – Abby