Java: Como comunicar entre um processador de anotação e outro projeto?
-
06-07-2019 - |
Pergunta
Eu tenho uma própria processador de anotação (vamos chamá-lo MyProcessor) e um projeto de (vamos chamá-lo MyProject) que utiliza o processador de
passando -processor
para javac
.
Agora eu preciso MyProcessor para produzir alguma saída e torná-lo disponível para MyProject.
Eu seguintes opções (e problemas):
-
Let MyProcessor escrever um arquivo para o caminho, especificado pelo
user.dir
propriedade.
Problema:. a partir do ponto de vista da MyProcessor,user.dir
é sempre o meu dir casa, não o caminho de MyProject -
Passe o diretório atual de MyProject para MyProcessor usando a opção
javac
de-A
.
Problema: É um caminho hard-coded feio:./some/path/to/MyProject/
-
Let MyProcessor gerar alguns arquivos de origem, que então seriam compilados pela
javac
juntamente com MyProject, de modo que MyProject pode se referir a esta classe compilados e recuperar dados a partir dele.
Problema: (?). É muito complexo para tal tarefa fácil -
O que outras opções existem?
Alguém por favor pode sugerir, como proceder?
Solução
Processor.init()
método (que você implementou) é invocado com ProcessingEnvironment como parâmetro o qual, por sua vez, tem um método getFiler()
retornando um Filer exemplo.
Você deve estar usando o método createResource()
do Filer
(assumindo que a saída está sendo gerado não é nem classe, nem fonte, caso contrário usar o método create
apropriado para isso) e escrever a sua saída para o classe ou locais de origem (ex é provavelmente preferível, mas isso depende do que você está fazendo). Ambos são substituível através de linha de comando em caso de necessidade, mas são bem definidas como eles são para ser usado em um processo de construção.