java eclipse annotation-processing

java - No se pueden cargar recursos en el Procesador de anotación(No en classpath)



eclipse annotation-processing (2)

Mi problema es que los archivos de propiedades no están disponibles a través del cargador de clases del procesador o a través de Filer.getResource(...) .

No estoy seguro de entender tu problema. Pero quizás algo aquí ayude.

¿Cómo puedo hacer que la fuente o la ruta de clase de este proyecto esté disponible para el procesador, de modo que pueda cargar los archivos de propiedades?

Debe agregar src/main/resources como una "carpeta de origen" en Eclipse. Primero seleccione Configure Build Path en Eclipse en su proyecto Java. Luego elija la pestaña Source y haga clic en Add Folder . Debería poder seleccionar la carpeta src/main/resources y hacer clic en Ok . Ahora debería ver src/main/resources en la lista de carpetas de origen.

Si observa su directorio de target/classes , debería ver todos los archivos del directorio de recursos que le permite saber que se copiaron en la ruta de clase correctamente.

# files in the src main resources > ls src/main/resources/x/y/z jgroups_udp.xml # should compile into target/classes > ls target/classes/x/y/z jgroups_udp.xml org # and should show up in the jar > -tvf target/project.jar 0 Thu Nov 03 18:50:00 EDT 2016 META-INF/ 135 Thu Nov 03 18:49:58 EDT 2016 META-INF/MANIFEST.MF ... 3036 Thu Nov 03 18:49:36 EDT 2016 x/y/z/jgroups_udp.xml

Luego, en su código, puede hacer referencia al archivo haciendo lo siguiente. Esto cargará el archivo desde la parte superior de la ruta de clase. Si está en un subdirector, entonces lleva con:

InputStream stream = getClass().getClassLoader().getResourceAsStream("x/y/z/jgroups_udp.xml");

Por cierto, si estuvieras usando maven, agregarías algo como lo siguiente a tu pom.xml :

<build> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>

Tengo un procesador de anotaciones que generará una enumeración con las claves definidas por los métodos de obtención de una interfaz.

La interfaz reside en

MyProject / src / main / java / my.package.MyInterfaces.java.

Quiero validar los archivos de propiedades que residen en MyProject/src/main/resources/META-INF/resource-bundle/ si contienen las claves definidas en la enumeración generada.

Mi problema es que los archivos de propiedades no están disponibles a través del cargador de clases del procesador o a través de Filer.getResource (...).

  • ¿Cómo puedo hacer que la fuente o la ruta de clase de este proyecto esté disponible para el procesador, de modo que pueda cargar los archivos de propiedades?

  • Ahora solo tengo disponibles los recursos dentro del contenedor donde reside el procesador. Intenté definir -classpath y / o -sourcepath a través de eclipse Proyecto / Propiedades / Compilador Java / Procesamiento de anotación / Opciones del procesador, pero no funcionó.

¿Alguien ha enfrentado un problema como este y puede alguien darme una pista de cómo puedo hacer que los recursos estén disponibles para el procesador?

Tengo la estructura de Maven pero no uso Maven, debido a las antiguas dependencias dentro de la aplicación. Así que Maven ya no es una opción para mí.

Eclipse 3.6 Helios Parece que StandardLocation.SOURCE_PATH y StandardLocation.CLASS_PATH no se implementan en Filer # getResource (), por lo que no parece posible escribir archivos de origen o de clase generados en SOURCE_PATH o CLASS_PATH sino que también se accede a cualquier archivo en SOURCE_PATH y CLASS_PATH *

Gracias.


Como solución alternativa, podría intentar agregar la ruta de clase que necesita usar a través del argumento de la línea de comandos -Xboothclasspath / a: ruta, la / a agregará el valor en la ruta a la ruta de la clase de arranque. Necesitaría agregar esto como una opción de línea de comando a la ejecución real del procesamiento de anotaciones, por lo que en Eclipse sería: Haga clic con el botón derecho en el proyecto, seleccione Propiedades, Compilador Java, Procesamiento de Anotación, haga clic en Nuevo en la tabla y agregue la clave -Xbootclasspath / a y La ruta para agregar como valor. Me temo que no lo he intentado para el procesamiento de anotaciones, pero vale la pena intentarlo.