Java: Wie zwischen einem Annotations-Prozessor und einem anderen Projekt kommunizieren?
-
06-07-2019 - |
Frage
Ich habe eine eigene Annotations-Prozessor (nennen wir es MyProcessor) und ein Projekt (nennen wir es MyProject) , die den Prozessor verwendet, die durch
vorbei -processor
zu javac
.
Jetzt muss ich MyProcessor eine Ausgabe produzieren und für MyProject zur Verfügung zu stellen.
Ich habe folgende Optionen (und Probleme):
-
Lassen Sie MyProcessor eine Datei auf den Weg schreiben, die von der Unterkunft
user.dir
angegeben.
Problem:. aus der Sicht von MyProcessor,user.dir
ist immer mein Home-Verzeichnis, nicht der Weg des MyProject -
Führen Sie das aktuelle Verzeichnis von MyProject mit
javac
der-A
Option MyProcessor.
Problem: Es ist ein hässlicher hartcodierte Pfad:./some/path/to/MyProject/
-
Lassen Sie MyProcessor einige Quelldateien erzeugen, die dann durch
javac
mit MyProject zusammen kompiliert werden würde, so dass MyProject diese kompilierten Klasse und Abrufen von Daten aus nachschlagen zu können.
Problem: (?). Es ist zu komplex für eine solche einfache Aufgabe -
Welche anderen Möglichkeiten gibt es?
Kann jemand bitte vorschlagen, wie es weitergehen?
Lösung
Processor.init()
Methode (die Sie implementiert haben) mit ProcessingEnvironment als Parameter, der seinerseits eine getFiler()
Methode hat eine Filer Instanz.
Sie sollten die createResource()
Methode der Filer
werden (unter der Annahme, die Ausgabe erzeugt wird, weder Klasse noch Quelle sind, andernfalls geeignete create
Methode dafür verwenden) und die Ausgabe zu schreiben, um entweder Klasse oder Quelle Stellen (früher ist wahrscheinlich vorzuziehen, aber es hängt davon ab, was Sie tun). Beide sind außer Kraft gesetzt werden über die Kommandozeilenoptionen wenn nötig, sind aber gut definiert, wie sie in einem Build-Prozess verwendet werden.