ClassPathResource没有获取类路径

Bla*_*dez 14 java spring classpath

在我的应用程序中,我想使用文件夹中存在的资源 media/src/main/resources/testMediaExif

为了得到这条路,我使用了这段代码,位于media/src/main/java/com/project/MyClass.java:

ClassPathResource resource = new ClassPathResource("classpath:testMediaExif");
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)

显示的错误是:

java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist
Run Code Online (Sandbox Code Playgroud)

如果我更改了该代码:

ClassPathResource resource = new ClassPathResource("testMediaExif");
Run Code Online (Sandbox Code Playgroud)

变量absolutePath采用以下值:

/Users/blanca/desarrollo/media/target/test-classes/testMediaExif
Run Code Online (Sandbox Code Playgroud)

为什么它指向目标路径?我怎么能改变它?

ska*_*man 17

有两个问题new ClassPathResource("classpath:testMediaExif"):

  1. classpath:前缀仅在配置文件(如XML文件)使用,如果你使用不应该被用来ClasspathResource直接.
  2. classpath:testMediaExif 指的是类路径根目录中的资源,而不是相对于您正在进行引用的文件.

试试这个:

new ClasspathResource("testMediaExif", getClass())
Run Code Online (Sandbox Code Playgroud)

要么

new ClasspathResource("testMediaExif", MyClass.class)
Run Code Online (Sandbox Code Playgroud)

这些将构建对testMediaExif相对于的资源的引用MyClass.

还有一件事: ClasspathResource.getFile()只在资源中工作才真正是一个文件.如果它被打包在JAR中,那么它将无法工作.


Ara*_*d A 5

我的猜测是绝对路径问题是因为你的maven POM目标中的outputDirectory.在我的项目中,outputDirectory war/WEB-INF/classes,从这里开始执行类.如果我将其更改为某个垃圾值,则不再执行该类.

所以我相信绝对路径必须对.class文件的位置做些什么.希望这可以帮助 .