2012-01-04 11 views
11

En mi solicitud, me gustaría utilizar un recurso que existe en una carpeta media/src/main/resources/testMediaExifClassPathResource no recibe la ruta de clase

Para conseguir ese camino, he usado esta pieza de código, situada en media/src/main/java/com/project/MyClass.java:

ClassPathResource resource = new ClassPathResource("classpath:testMediaExif"); 
File file = resource.getFile(); 
String absolutePath = file.getAbsolutePath(); 

El error que aparece es:

java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist 

Si cambio de ese código:

ClassPathResource resource = new ClassPathResource("testMediaExif"); 

El rutaAbsoluta variable toma este valor:

/Users/blanca/desarrollo/media/target/test-classes/testMediaExif 

¿Por qué se apuntan a la ruta de destino? ¿Cómo podría cambiarlo?

Respuesta

5

Supongo que el problema de la ruta absoluta se debe al outputDirectory en el destino de su POM de maven. En mi proyecto, las clases outputDirectory war/WEB-INF/y desde aquí se ejecutan las clases. Si lo cambio a algún valor no deseado, la clase ya no se ejecuta.

Creo que la ruta absoluta tiene que ver con la ubicación de tus archivos .class. Espero que esto ayude .

+0

¡Tiene toda la razón!

+0

Este archivo .classpath se genera automáticamente, y temo las consecuencias que este cambio podría tener en otras pruebas Al menos sé el motivo de mi problema. Gracias –

17

Hay dos problemas con new ClassPathResource("classpath:testMediaExif"):

  1. El classpath: prefijo sólo se utiliza en los archivos de configuración (por ejemplo, archivos XML), y no debe ser usado si usted está utilizando ClasspathResource directamente.
  2. classpath:testMediaExif se refiere a un recurso en la raíz del classpath, no relativo al archivo en el que está haciendo la referencia.

Tal vez puedas probar:

new ClasspathResource("testMediaExif", getClass()) 

o

new ClasspathResource("testMediaExif", MyClass.class) 

Estos construirá una refernce a un recurso llamado testMediaExif relativa a MyClass.

Una cosa más:ClasspathResource.getFile() solo funcionará en el recurso realmente es un archivo. Si está empaquetado en un JAR, entonces no funcionará.

+0

Gracias, con su enfoque, el problema viene cuando trato de obtener el camino absoluto. new ClasspathResource ("testMediaExif", getClass()) obtiene la ruta donde se encuentra la clase, pero getAbsolutePath apunta a la carpeta de destino nuevamente –

Cuestiones relacionadas