我们将更新我们的CI系统,该系统创建从Java 7到Java 8的构建。稍后我们希望将项目逐个迁移到Java 8。当然,我们希望能够为仍使用Java 7的旧版本创建bugfix版本。
如果我们将构建相同的源,目标版本和源版本从JDK 7转移到JDK 8,我们能否确定不会出现任何问题?我们对开发机器进行了测试,没有任何问题。
在此之前,我们还逐步将部署服务器从JRE 7更新到JRE 8。
请注意,我们希望在CI系统上保持单个Java JDK安装,否则会变得复杂。
为了更清楚:
我对相同的执行结果更感兴趣,而不是相同的字节码。如果我理解正确的话,相同的字节码只会确认第一个(在相同的JRE上运行)。
在我们在Java 8上运行所有部署之前,我们不会在代码中使用Java 8功能。因此兼容性不是问题。
使用不同版本的JDK和相同的目标和源版本编译Java是否会产生相同的字节码?
没有保证。
实际上,使用相同编译器在相同硬件上使用相同选项从相同源代码创建的两个.class文件将具有相同的字节码,但由于嵌入式编译时间戳属性,文件可能仍然不同。
但是,如果您想比较概念上等效的字节码文件,这个Q&A提供了一些可能的线索:
我希望你 将 发现Java 7和Java 8编译器生成的字节码之间存在一些差异,但这并不重要。
是啊!它实际上取决于代码。在某些情况下,它可能会生成不同的字节码,但通常情况下它会生成相同的字节码。
不同的JDK将具有不同的Java编译器,这些Java编译器可以为相同的源代码发出不同的字节码。 javac编译器随着时间的推移而发展。
Java的不同主要版本通常会发出符合类文件规范的不同版本的类文件。
即使您将自己限制为一个JDK安装,在同一源文件上运行两次编译器也会生成不同的.class文件。