java使用不同的JDK版本构建:相同的工件?

时间:2009-04-15 16:49:29

标签: java

这是我的情景:

  • 工作站A:Sun JDK 1.6
  • 工作站B:Sun JDK 1.5

我使用Ant 1.7构建A和B

<javac srcdir="${foo}" destdir="${bar}" source="1.5" target="1.5">
  <include name="**/*.java"/>
  <exclude name="**/test/**/*.java"/>
</javac>

然而 .class 文件的大小与A&amp; B,更不用说CRC了。是应该这样吗?还是我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:5)

是的,它应该是这样的。即使针对同一个VM,不同的编译器也可能会发出不同的字节代码。只要生成的程序行为正确,JLS就不会精确地命令如何将源代码编译为字节代码。

答案 1 :(得分:5)

虽然您可以明确设置source="1.5"target="1.5",但控制您正在运行的javac编译器的JDK版本。

因此,在JAVA_HOME / PATH指向JDK 1.6的工作站上,您拥有基于1.6 javac构建的类文件,该文件应与1.5 JRE兼容。

但是,source="1.5"target="1.5"仅指定语法/语言功能的兼容性;如果您依赖于仅在1.6 JRE中可用的某些类,那么在1.6 javac上使用source="1.5"target="1.5"时,您将不会收到任何编译器警告。

要解决最后一点,您需要告诉<javac> Ant任务使用不同的bootclasspath