6 Stimmen

Warum sind Klassendateien unterschiedlich groß, wenn man den gleichen Code in Eclipse und dann mit dem Eclipse-Compiler über Ant kompiliert?

Ich mache eine automatisierte Build-Umgebung mit Ameise, um einen frisch ausgecheckten Quellbaum mit dem gleichen Eclipse-Compiler zu erstellen, der in Eclipse verwendet wird. Das Problem ist, dass einige der resultierenden Klassendateien eine andere Größe haben als die Klassendatei, die beim Kompilieren in Eclipse erzeugt wird. Warum ist das so? Ist das in Ordnung und ist das zu erwarten? Wie vorgeschrieben weise ich Ant an, den Eclipse-Compiler zu verwenden, etwa so:

<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>

5voto

Eclipse verwendet einen eigenen Compiler, der einen etwas anderen - aber korrekten - Bytecode erzeugt.

Ant verwendet den Standard-Compiler von Sun - javac - der im JDK enthalten ist.

Der Eclipse-Compiler kann von eclipse.org heruntergeladen werden und Ant wird angewiesen, ihn zu verwenden. Dies hat den zusätzlichen Vorteil, dass er nur mit der JRE kompilieren kann, die viel einfacher zu installieren ist als das vollständige JDK. Suchen Sie nach "JDT Core Batch Compiler" in http://download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/index.php


EDIT: Selbst mit demselben Compiler kann der erzeugte Bytecode unterschiedlich sein. Einige Faktoren, die dies beeinflussen, sind:

  • Ziel-JVM - Java 6 Byte-Codes unterscheiden sich geringfügig von Java 1.2 Byte-Codes.
  • Optimierungsebene (etwas Inlining, heutzutage besser der JVM überlassen)
  • Einbeziehung von Debug-Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X