Pregunta

Tengo un propio procesador de anotaciones (llamémoslo MyProcessor) y un proyecto (llamémoslo MyProject) que utiliza el procesador por pasar -processor a javac .

Ahora necesito MyProcessor para producir algunos resultados y ponerlos a disposición de MyProject.

Tengo las siguientes opciones (y problemas):

  • Deje que MyProcessor escriba un archivo en la ruta, especificado por la propiedad user.dir .
    Problema: desde el punto de vista de MyProcessor, user.dir es siempre mi directorio de inicio, no la ruta de MyProject.

  • Pase el directorio actual de MyProject a MyProcessor usando la opción javac ' -A .
    Problema: es una ruta fea y codificada: /some/path/to/MyProject/.

  • Deje que MyProcessor genere algunos archivos fuente, que luego serían compilados por javac junto con MyProject, para que MyProject pueda referirse a esta clase compilada y recuperar datos de ella.
    Problema: es demasiado complejo para una tarea tan fácil (?).

  • ¿Qué otras opciones hay?

¿Puede alguien sugerir, cómo proceder?

¿Fue útil?

Solución

Processor.init () (que ha implementado) se invoca con ProcessingEnvironment como parámetro que, a su vez, tiene un método getFiler () que devuelve un Filer instancia.

Debería utilizar el método createResource () del Filer (suponiendo que la salida que se genera no es clase ni fuente; de ??lo contrario, use el create método para eso) y escriba su salida en clase o fuente ubicaciones (la primera es probablemente preferible, pero depende de lo que esté haciendo). Ambos se pueden anular mediante modificadores de línea de comandos si es necesario, pero están bien definidos, ya que se utilizarán en un proceso de compilación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top