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 di javac .
    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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top