问题
In my application, I would like to use a resource that exist in a folder media/src/main/resources/testMediaExif
To get that path, I used this piece of code, located in media/src/main/java/com/project/MyClass.java:
ClassPathResource resource = new ClassPathResource("classpath:testMediaExif");
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
The error shown is:
java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist
If I change that code:
ClassPathResource resource = new ClassPathResource("testMediaExif");
The variable absolutePath takes this value:
/Users/blanca/desarrollo/media/target/test-classes/testMediaExif
Why does it point to the target path? How could I change it?
回答1:
My guess is that the absolute path issue is because of the outputDirectory in the target of your maven POM . In my project the outputDirectory war/WEB-INF/classes and the it is from here the classes get executed . If I change it to some junk value , the class no longer gets executed .
So I believe the absolute path has to do something with the location of your .class files . Hope this helps .
回答2:
There are two problems with new ClassPathResource("classpath:testMediaExif"):
- The
classpath:prefix is only used in config files (e.g. XML files), and should not be used if you're usingClasspathResourcedirectly. classpath:testMediaExifrefers to a resource in the root of the classpath, not relative to the file in which you're making the reference.
Try this instead:
new ClasspathResource("testMediaExif", getClass())
or
new ClasspathResource("testMediaExif", MyClass.class)
These will construct a refernce to a resource called testMediaExif relative to MyClass.
One more thing: ClasspathResource.getFile() will only work in the resource really is a file. If it's packed in a JAR, then it won't work.
来源:https://stackoverflow.com/questions/8725149/classpathresource-does-not-get-the-classpath