Kompilieren einer Java-Klasse im Speicher mit "Lombok" -Anmerkungen und Java JDK 8

8

Ich versuche, die Beschreibung einiger Java Beans aus einer XML-Datei abzurufen. Ich möchte sie mit @Data aus dem Projekt lombok kommentieren, um automatisch Konstruktor, equals, hashCode, Getter, Setter und toString einzuschließen. Ich möchte sie im Speicher kompilieren, ein paar Instanzen (mit Daten aus der gleichen XML-Datei) generieren und sie zu Drools hinzufügen, um eventuell einige Überlegungen zu diesen Daten anzustellen.

Leider kann ich diese Klassen nicht zusammenstellen und darum bitte ich um Ihre Hilfe!

Der folgende Code zeigt, wie programmgesteuert Java-Klassen im Speicher kompiliert werden:

%Vor%

wo MemoryFileManager ist:

%Vor%

und MemoryJavaClassObject ist:

%Vor%

und schließlich MemoryJavaFileObject ist:

%Vor%

Wenn ich das Beispiel im ersten Codeblock ausführe, bekomme ich wie erwartet folgende Ausgabe:

%Vor%

Wenn ich jetzt lombok.jar in mein Projekt hinzufüge, füge ich folgendes Beispiel ein:

%Vor%

Leider bekomme ich nicht die erwartete Ausgabe, sondern:

%Vor%

Beachten Sie, dass die Klasse kompiliert wird und die Standardmethode toString() ausgeführt wird, da die typische Ausgabe angezeigt wird. Beachten Sie auch, dass ich, wenn ich das vorherige Beispiel ausführe, jetzt folgendes bekomme:

%Vor%

Offensichtlich hängt lombok , indem er die von der Ausnahme übergebene Warnmeldung betrachtet, den gegebenen Compiler nicht richtig ein. Leider konnte ich keine nützliche Information finden. Ich kann nur denken, dass es lombok nicht richtig mit Java JDK 8 handeln könnte. Habe ich recht?

Kennen Sie eine andere Möglichkeit, dieses Problem zu umgehen?

    
Stefano Bragaglia 01.09.2014, 13:49
quelle

1 Antwort

6

Dank Holger habe ich das Problem erfolgreich gelöst.

Das Problem wurde durch das Fehlen von tools.jar im Klassenpfad verursacht. Dies liegt daran, dass Eclipse die Java-Umgebung standardmäßig als JRE statt als JDK erkennt.

Darüber hinaus kann Java JDK - oder möglicherweise nicht, je nachdem, welche Version Sie haben - die tools.jar -Datei haben.

Wenn Sie Java 7 oder 8 haben, sollten Sie eine solche Bibliothek in $JAVA_HOME/lib/tools.jar haben.

Wenn Sie Java 6 haben, ist die Datei nicht vorhanden, aber die gleiche Funktionalität wird von $JAVA_HOME/Classes/classes.jar bereitgestellt.

Der Compiler ist ein Feature, das mit Java 6 hinzugefügt wurde. Wenn Sie es also verwenden und eine ältere Version von Java haben, sollten Sie zuerst Ihre Umgebung aktualisieren.

Nun gibt es mehrere Möglichkeiten, tools.jar (oder classes.jar ) in den Klassenpfad Ihres Projekts einzufügen; Da ich Gradle benutze, habe ich beschlossen, es als Abhängigkeit einzuführen, wie Sie im folgenden Codeschnipsel sehen können:

%Vor%

Ich hoffe, diese kleine Erklärung könnte anderen Menschen helfen, die ein ähnliches Problem haben!

Prost!

    
Stefano Bragaglia 03.09.2014, 18:44
quelle