2010-03-18 6 views
5

Estoy tratando de crear una aplicación que cree un archivo de recursos en un contenedor, pero me gustaría que el proyecto pueda ejecutarse dentro de Eclipse. Tengo una estructura básica de maven 2 para mi proyecto, y no estoy seguro de cómo leer en el archivo de modo que se encuentre y se use cuando se ejecute desde el JAR o desde dentro de Eclipse. ¿Pensamiento?¿Lees un archivo desde un contenedor o en cualquier lugar del classpath?

Estructura:

src/main/java 
src/main/resources/file.txt 

método de lectura actual:

getClass().getResourceAsStream("/file.txt") 

¿Hay método de lectura que va a recoger src// recursos/*, así como el nivel de la raíz principal del JAR (donde se implementan los recursos)?

Respuesta

8

No entiendo su problema. Los recursos de src/main/resources se copian automáticamente en target/classes y, por lo tanto, están disponibles en el classpath bajo Maven y Eclipse con relación al nivel raíz en la misma ubicación (a menos que su proyecto Eclipse no esté configurado correctamente).

Y cuando se empaqueta dentro de un JAR, el contenido de target/classes se empaqueta "tal cual", por lo que no se cambia nada.

En otras palabras, el acceso a su file.txt como esto está perfectamente bien (y esto es en realidad how things are documented):

// Retrieve resource 
InputStream is = getClass().getResourceAsStream("/file.txt"); 

// Do something with the resource 

... 

Si usted tiene un problema en alguna parte, por favor aclarar.

Actualización: Hice una prueba rápida con el experto en Eclipse-plugin y no puedo reproducir el problema:

$ mvn archetype:generate -DgroupId=com.stackoverflow -DartifactId=q2467362 -Dversion=1.0-SNAPSHOT 
... 
$ cd q2467362 
$ mkdir -p src/main/resources 
$ mvn eclipse:eclipse 
... 
$ cat .classpath 
<classpath> 
    <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/> 
    <classpathentry kind="src" path="src/main/java" including="**/*.java"/> 
    <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/> 
    <classpathentry kind="output" path="target/classes"/> 
    <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
</classpath> 

El directorio src/main/resources se añade como carpeta de origen como se esperaba. ¿Puedes mostrar tu POM (especialmente el elemento resources si defines uno)?

+0

¿Qué se debe hacer con el proyecto eclipse para que copie los recursos a destino/clases durante el paso de compilación automático? –

+0

@Stefan Setup 'src/main/resource' como carpeta de origen. Pero esto debe hacerse tanto con maven-eclipse-plugin como con M2Eclipse. –

+0

Intenté regenerar el proyecto con mvn eclipse: eclipse, pero aún no lo hice. Hmm. Supongo que lo agregaré manualmente de esta manera, entonces. –

Cuestiones relacionadas