2012-01-04 14 views
11

Nella mia domanda, vorrei utilizzare una risorsa che esistono in una cartella media/src/main/resources/testMediaExifClassPathResource non ottiene il classpath

Per ottenere questa strada, ho usato questo pezzo di codice, che si trova in media/src/main/java/com/project/MyClass.java:

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

L'errore visualizzato è:

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

Se cambio il codice:

ClassPathResource resource = new ClassPathResource("testMediaExif"); 

L'AbsolutePath variabile assume questo valore:

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

perché lo fa puntare al percorso di destinazione? Come posso cambiarlo?

risposta

5

La mia ipotesi è che la questione percorso assoluto è a causa del OutputDirectory nel target della vostra Maven POM. Nel mio progetto, la directory outputDirectory war/WEB-INF/e il file viene eseguito da qui. Se lo cambio con un certo valore di junk, la classe non viene più eseguita.

Quindi credo che il percorso assoluto ha a che fare qualcosa con la posizione dei file .class. Spero che questo ti aiuti .

+0

Sei totalmente ragione!

+0

file di .classpath Thhese viene generato automaticamente, e temo delle consequencies che questo cambiamento potrebbe avere in altri test Almeno conosco la ragione del mio problema. Grazie –

17

Ci sono due problemi con new ClassPathResource("classpath:testMediaExif"):

  1. Il classpath: prefisso viene utilizzato solo nei file di configurazione (ad esempio file XML), e non deve essere usato se si sta utilizzando ClasspathResource direttamente.
  2. classpath:testMediaExif si riferisce a una risorsa nella radice del classpath, non è relativo al file in cui si sta facendo riferimento.

Prova a modificare:

new ClasspathResource("testMediaExif", getClass()) 

o

new ClasspathResource("testMediaExif", MyClass.class) 

Questi costruirà un refernce ad una risorsa chiamata testMediaExif rispetto al MyClass.

Un'ultima cosa:ClasspathResource.getFile() funziona solo nella risorsa è davvero un file. Se è imballato in un JAR, allora non funzionerà.

+0

Grazie, con il tuo approccio, il problema arriva quando cerco di ottenere il percorso assoluto. nuova ClasspathResource ("testMediaExif", getClass()) ottiene il percorso in cui la classe è, ma i punti getAbsolutePath a destinazione cartella di nuovo –