我有一个在java 1.3上运行的服务器 - 客户端应用程序;我想逐步改为java 1.6,意思是前几个客户端,而不是其他客户端,最后是服务器...... 我想知道你能指导一些可能出现的常见问题吗?我应该照顾什么?
答案 0 :(得分:11)
Sun试图保持高水平的向后兼容性,因此您可以简单地安装新的JVM并使用它重新启动应用程序。
描述Java 1.6与早期版本的向后不兼容性的文档是here。本文档还链接了Java 1.5和Java 1.4的兼容性文档。您可能希望阅读此文档以了解可能存在的陷阱。
Java 1.5和Java 1.6引入了新的类文件格式。 JVM也将运行旧的类文件,但重新编译代码 - 尤其是使用JDK 1.6 - 将有助于新JVM利用一些更改来加快应用程序的运行速度。所以你可以考虑重新编译。
此外还引入了一些新的关键字,即assert(在1.4中)和enum(在1.5中)(如Yuval已经提到的)。如果您将这些单词用作标识符,则重新编译将失败,但旧的类文件将起作用。您可以将开关-source
提供给javac以使其编译:'javac -source 1.3
'将编译代码而不将断言和枚举作为关键字。
答案 1 :(得分:4)
在我的脑海中,在字段和局部变量中查找名称enum
和assert
...这些单词已成为java 1.4和5中的关键字.java 6编译器将标记如果它们看到它们就作为编译错误。
Yuval = 8-)
答案 2 :(得分:4)
Sun保留了每个新版Java引入的不兼容性列表。
1.4.2的最后一个文档包含指向JDK 1.0的兼容性说明的链接。
答案 3 :(得分:3)
通常,Sun的JVM的向后兼容性非常好,但并不完美。我已经看到三个非常大的应用程序从1.3迁移到1.5并且只遇到少量问题,其中最大的问题是一个Swing掩码进入无限的事件处理循环并冻结了1.4以下的应用程序
服务器部分不太可能导致问题,但是Swing中存在相当大的底层更改,特别是在1.3和1.4之间 - 例如,焦点子系统已被完全重写。
应用程序仍然可以毫无问题地运行,但你绝对应该进行广泛的测试。
答案 4 :(得分:2)
当我在一个小工具上从1.4.2移动到1.5时,很多东西都破了:屏幕刷新变得不稳定,元素移动等等。
Sun的JRE不保持所有内容的向后兼容性。有时,当项目被弃用时,它们会在很短的时间后完全消失。
我们用“库存”Java编写了一切,也使用了Sun的库。
我也看到过几个用纯Java编写的应用程序,在同一版本的JRE中的一个或两个平台上运行正常,但在其他版本的JRE上运行失败(我使用的产品现在在Windows上工作得很好,在Mac上运行正常OS X,在Linux上很不错,但在Solaris上失败 - 所有都使用相同的JRE。)
移动版本不是一个简单的步骤,除非应用程序非常小。
答案 5 :(得分:0)
我的经验是兼容性非常高。我只发现了一个我无法在当前版本上运行的应用程序。无论出于何种原因(没有来源,所以我没有深入研究),一个应用程序不会运行1.4.2以外的任何其他应用程序。我曾经处理过的所有其他东西(其中一些相当大)已达到1.6就好了。无需修改。
YMMV当然,所以你必须尝试看看......