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:
und MemoryJavaClassObject
ist:
und schließlich MemoryJavaFileObject
ist:
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:
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:
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?
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:
Ich hoffe, diese kleine Erklärung könnte anderen Menschen helfen, die ein ähnliches Problem haben!
Prost!
Tags und Links java-8 compiler-construction lombok