2016-07-13 17 views
1

Ich untersuchte das Klassendateiformat, da ich der Klassendatei Quellcode hinzufügen wollte (was in frühen Java-Versionen möglich war), aber alles, was ich fand, war ein SourceFile-Attribut und das SourceDebug-Attribut. Ich suchte nach dem vollständigen Quellcode der Klasse, der mit der Klassendatei gebündelt werden sollte, um die Nachverarbeitungspipeline zu vereinfachen.Java: Klassendateien mit Quellcode?

Weiß jemand, ob meine Erinnerungen falsch sind oder wie ich den kompletten Quellcode einer Klasse innerhalb der Klassendatei bündeln kann, so dass ich nicht nach der Java-Datei suchen muss, wenn ich den Quellcode überprüfen möchte ?

Gibt es einen Compiler-Schalter, um das zu tun?

Javac verfügt über die Option -g, die zusätzliche Debug-Informationen hinzufügt. Kann mir jemand sagen, welche Informationen hinzugefügt werden? Ohne den Schalter -g generiert es Zeilen mit Codeindex und Quelldateiinformationen.

Das Hauptproblem, das ich habe, ist eine Klassendatei zu generieren, aber nur einen Verweis auf eine Quelldatei, die sich ändern kann. Ich möchte einfach Quell- und Klassendatei bündeln.

In Maven kann ich einfach über alle Quelldateien in das Zielverzeichnis kopieren, wäre aber möglicherweise nicht kompatibel mit Eclipse, IntelliJ und NetBeans IDE (und was nicht) ....

+3

Ich glaube, Sie können Quellen und Klassen in einem Glas bündeln. –

+0

Wenn Sie maven verwenden, ist es sehr einfach: [link] (https://maven.apache.org/plugin-developers/cookbook/attach-source-javadoc-artifacts.html). Der Quellcode ist in einem zusätzlichen Jar gebündelt, der unabhängig heruntergeladen werden kann. Ich kann aus eigener Erfahrung sagen, dass Eclipse dieses Feature gut integriert, d.h.Sie können den Quellcode eines externen Krugs sehen, als ob er direkt im Krug wäre. – martinhh

+0

Aber im Grunde gibt es keine einfache Möglichkeit, Java-Quellen direkt zu Klassendateien hinzuzufügen? –

Antwort

0

Eine mögliche Lösung, die ich gefunden habe, ist die Definition eines neuen Klassen-Datei-Attributs (das legal ist), das die Quelle enthält. Da die Quelle im Vergleich zur Klassendatei sehr groß ist, könnte der Inhalt am besten komprimiert werden (was ein Verhältnis von 1: 5 zu 1:10 ergibt).

Auf diese Weise bleiben die Klassendatei und die Quellen gebündelt.

Die JVM-Spezifikation garantiert, dass jedes JVM/Tool unbekannte Attribute ignorieren muss.

Ich werde in einen Wrapper von Javac-Anwendung investieren, die sicherstellt, dass die Quelle nicht während der Kompilierung geändert wurde (und wenn ja, wiederholen Sie den Kompilierungsprozess) und nach dem Kompilieren ist das Hinzufügen des Quellcodes als Klassen-Datei-Attribut.

Da dies mit dem IDE-Build-Zyklus von Eclipse (und höchstwahrscheinlich IntelliJ und NetBeans) nicht kompatibel ist, wird auch ein spezieller Postprozessor benötigt.

Die Integration erfordert also auch Alternativen zum JavaBuilder.

Sobald der Quellcode an die fragliche Klassendatei angehängt ist, ist es sehr einfach, viele fortgeschrittene Dinge damit zu tun, die sowohl bei der Verwaltung als auch beim Verwalten von Code helfen. Für mich ist es wichtig, dass der Quellcode und eine Klasse zusammen bleiben und die Quellinformationen zu 100% dem Quellcode entsprechen, aus dem sie kompiliert wurden.

0

Die Verwendung eines Decompilers bietet auch eine Möglichkeit zum Extrahieren einer nützlichen Darstellung des Quellcodes, da der meiste Decompiler die Zeilen von Codeinformationen bewertet und die dekompilierten Strukturen entsprechend innerhalb des Quellcodes positioniert.

Da einige Szenarien Zugriff auf Kommentare und eine korrekte Darstellung auf Char-by-Char-Ebene erfordern, wäre der Decompiler eine Lösung mit zwei Raten.

Verwandte Themen