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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top