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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top