这是我的情景:
我使用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了。是应该这样吗?还是我错过了一些明显的东西?
答案 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
。