2016-05-01 11 views
3

Ich benutze Javassist, um Methodenaufrufe innerhalb einer Methode basierend auf der Zeilennummer in der Quelldatei zu ersetzen. Die Funktionalität wirkt wie ein Zauber. Das Problem ist, dass sich die Zeilennummer des Methodenaufrufs von der Eclipse-Kompilierung zur Maven-Kompilierung unterscheidet.Zeilennummern in der .class-Datei unterscheiden sich von Eclipse-Kompilierung und Maven-Kompilierung

Szenario:

eine Erklärung Betrachten oder eine Bedingung ist, in zwei Zeilen. Standardmäßig kompiliert Eclipse den Code und fügt ihn wie angegeben in das Ausgabeverzeichnis ein. Innerhalb der kompilierten Klassendatei befindet sich die Bedingung jedoch auch in zwei Zeilen. Wenn die Klasse von Maven-Build kompiliert wird, befindet sich die Bedingung in der Klassendatei in einer einzelnen Zeile. Maven versteht es als einzelne Anweisung und generiert die Klassendatei entsprechend.

Beispiel:

32. public void verifyMock1(){ 
33. if(PaltformRuntime.getInstance().getElementRegistry().returnSuggestion()&& 
34.  paltformRuntime.getInstance().getElementRegistry().returnSuggestion()){   
35.   System.out.println("entered into the castle"); 
36. } 
37. } 

auf dem obigen Szenario Basierend wenn ich returnSuggestion() Methodenaufruf innerhalb der if Bedingung ersetzt werden soll. Es ist in zwei Zeilen 34 und 35, aber es ist eine einzige Aussage. Wenn die Klasse von Eclipse kompiliert wird, sagt es wie 34 und 35. Wenn dieselbe Klasse von Maven kompiliert wird, ist die ganze if Anweisung in 34 (Startzeile). Was ist der Grund dafür und wie funktioniert Eclipse wie Maven Compilation? (Anmerkung: beide haben Java 1.7-Compiler.)

+1

Mögliches Duplikat von [Verwendung von Eclipse Java Compiler (ecj) in Maven-Builds] (http://stackoverflow.com/questions/33164976/using-eclipse-java-compiler-ecj-in-maven-builds) –

+0

Auch von Interesse: http://stackoverflow.com/questions/14186091/how-to-configure-eclipse-to-compile-using-oracle-javac-1-7-0-09 –

Antwort

1

Der Grund hinter ecj, die ausführlichere Zeileninformationen ausgibt, ist eine bessere Debugging-Erfahrung zu ermöglichen, wo es z. B. einfacher ist, einen Methodenaufruf in der zweiten Zeile des Komplexes auszuführen Ausdruck.

Ecj hat keine Option, einfachere Zeileninformationen zu senden, noch hat javac die gegenteilige Option.

Also, wenn Sie Eclipse und Maven die exakt gleichen Informationen produzieren müssen, wird Ihnen eine der beiden in den Kommentaren genannten Richtungen helfen. Siehe auch die JDT FAQ.

Verwandte Themen