Java: come comunicare tra un processore di annotazione e un altro progetto?
-
06-07-2019 - |
Domanda
Ho un processore di annotazioni (chiamiamolo MyProcessor) e un progetto (chiamiamolo MyProject) che usa il processore da
passando -processor
a javac
.
Ora ho bisogno di MyProcessor per produrre un output e renderlo disponibile per MyProject.
Ho le seguenti opzioni (e problemi):
-
Consenti a MyProcessor di scrivere un file nel percorso, specificato dalla proprietà
user.dir
.
Problema: dal punto di vista di MyProcessor,user.dir
è sempre la mia home directory, non il percorso di MyProject. -
Passa la directory corrente di MyProject a MyProcessor usando l'opzione
-A
dijavac
.
Problema: è un brutto percorso hardcoded:/some/path/to/MyProject/
. -
Consenti a MyProcessor di generare alcuni file di origine, che verranno quindi compilati da
javac
insieme a MyProject, in modo che MyProject possa fare riferimento a questa classe compilata e recuperarne i dati.
Problema: è troppo complesso per un'attività così semplice (?). Quali altre opzioni ci sono?
Qualcuno può suggerire, come procedere?
Soluzione
Processor.init ()
(che hai implementato) viene invocato con ProcessingEnvironment come parametro che, a sua volta, ha un metodo getFiler ()
che restituisce un istanza di Filer .
Dovresti usare il metodo createResource ()
del Filer
(supponendo che l'output generato non sia né classe né sorgente; altrimenti usa create ) e scrivi il tuo output in class o source locations (la prima è probabilmente preferibile, ma dipende da cosa stai facendo). Entrambi sono sostituibili tramite opzioni della riga di comando, se necessario, ma sono ben definiti in quanto devono essere utilizzati in un processo di generazione.