为什么在eclipse中编译相同的代码时,类文件的大小不同,然后通过ant使用eclipse编译器?

dar*_*ckc 5 java eclipse

我正在使用ant构建一个自动构建环境,使用eclipse中使用的相同eclipse编译器构建一个新签出的源代码树.问题是,一些生成的类文件的大小不同于在eclipse中编译生成的类文件.为什么是这样?这没关系,还可以预料到吗?按照规定,我告诉Ant使用eclipse编译器,如:

<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
        <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
        <antcall target="build"/>
</target>
Run Code Online (Sandbox Code Playgroud)

Tho*_*sen 5

Eclipse使用自己的编译器,它生成稍微不同但正确的字节码.

Ant使用JDK中提供的标准Sun编译器 - javac.

可以从eclipse.org下载eclipse编译器,并告诉ant使用它.这样做的另一个好处是能够单独使用JRE进行编译,这比完整的JDK更容易安装.在http://download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/index.php中查找"JDT核心批处理编译器"


编辑:即使使用相同的编译器,生成的字节代码也可能不同.影响这一点的一些因素是:

  • 目标JVM - Java 6字节代码与Java 1.2字节代码略有不同.
  • 优化级别(一些内联,最好留给JVM这些天)
  • 调试信息包含.

  • @Aaron F:像Eclipse这样的应用程序(使用JDT)需要有一套非常好的静态分析工具来支持它通过语法突出显示,错误突出显示,建议,自动完成等方面的反馈.Javac不提供这种支持通过API,所以他们自己创建了套件.那时创建编译器是非常少的额外工作,并且具有不需要单独安装JDK的额外好处. (3认同)
  • "使用eclipse中使用的相同eclipse编译器"(虽然我的猜测是编译器标志不一样) (2认同)