我有一个在 java 1.3 上运行的服务器 - 客户端应用程序;我想逐步更改为 java 1.6,这意味着最初的几个客户端,而不是其余的客户端,最后是服务器......我想知道你能否指导我解决一些可能出现的常见问题以及我应该注意什么?
6 回答
Sun 试图保持高水平的向后兼容性,因此您可以简单地安装新的 JVM 并使用它重新启动您的应用程序。
描述 Java 1.6 与早期版本的向后不兼容性的文档在这里。该文档也链接了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
' 将编译没有assert和enum作为关键字的代码。
在我的脑海中,寻找名称enum
以及assert
字段和局部变量......这些词已成为java 1.4和5中的关键字。java 6编译器如果看到它们会将它们标记为编译错误。
尤瓦尔=8-)
Sun 保留了随 Java 的每个新版本引入的不兼容问题的列表。
1.4.2 的最后一个文档包含指向 JDK 1.0 的兼容性说明的链接。
一般来说,Sun 的 JVM 的向后兼容性非常好,但并不完美。我已经看到三个非常大的应用程序从 1.3 迁移到 1.5,并且只遇到了少量问题,其中最大的一个是一个 Swing 掩码进入了一个无限的事件处理循环并在 1.4 下冻结了应用程序
服务器部分不太可能引起问题,但在 Swing 中发生了相当大的内部变化,尤其是在 1.3 和 1.4 之间——例如,焦点子系统被完全重写。
该应用程序仍有可能毫无问题地运行,但您绝对应该进行广泛的测试。
当我在我工作的一个小程序上从 1.4.2 迁移到 1.5 时,很多事情都崩溃了:屏幕刷新变得很不稳定,元素移动等等。
Sun 的 JRE 并不保持对所有内容的向后兼容性。有时,当项目被弃用时,它们会在很短的一段时间后完全消失。
我们用“普通”Java 编写了所有东西,也使用了 Sun 的库。
我还看到了几个用纯 Java 编写的应用程序,它们在同一版本的 JRE 中的一个或两个平台上运行良好,但在使用该版本的其他平台上却失败了(我使用的产品现在在 Windows 上运行良好,在 Mac OS X 上运行良好,在 Linux 上不错,但在 Solaris 上失败 - 都使用相同的 JRE)。
移动版本不是一个简单的步骤,除非应用程序真的很小。
我的经验是兼容性很高。我只发现了一个无法在当前版本上运行的应用程序。无论出于何种原因(没有源代码,所以我没有深入研究它),一个应用程序不会在 1.4.2 以外的任何东西上运行。我曾经处理过的所有其他事情(其中一些相当大)都达到了 1.6 就好了。无需修改。
当然是YMMV,所以你必须尝试一下,看看......