是否在同一源文件中使用来自不同JDK版本的编译器中断(反)序列化?

SAL*_*000 2 java serialization build-process jar

我有一个分布式应用程序.客户端和服务器共享一些公共库.客户端必须使用JDK 5编译器或target = 1.5进行编译(在PowerPC和CoreDuo Mac上也可以在任何地方运行).但我想在仅服务器代码中使用SE 6功能.

是否可以编译公共库两次 - 一次使用JDK 5,一次使用JDK 6,并使用JDK 5编译的类文件在客户端序列化对象,并在服务器端使用JDK 6编译的类文件对它们进行反序列化反之亦然?或者会打破序列化?

构建应该使用不同JDK版本编译的代码运行的库的最佳实践是什么?

Mic*_*ers 5

如果明确定义了serialVersionUID,则应该可以在不同的JVM版本中进行序列化和反序列化.这就是定义它的重点; 看规格:

- 强烈建议所有可序列化类显式声明serialVersionUID值,因为默认serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此可能在serialVersionUID反序列化期间导致意外冲突,从而导致反序列化失败.