2009-04-15 79 views
1

这里是我的方案:java用不同的JDK版本构建:相同的工件?

  • 工作站A:太阳JDK 1.6
  • 工作站B:孙JDK 1.5

我建立在A和B使用Ant 1.7

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

但A & B的文件大小不同,更不用说CRC了。它应该是这样吗?还是我错过了明显的东西?

回答

5

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

5

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

因此,在指向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

+0

+1 - 不是为了答案,而是为了有用的提示(没有想到这一点) – 2009-04-15 17:01:56

相关问题