ClassPathResource没有获取类路径

时间:2012-01-04 10:17:46

标签: 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();

显示的错误是:

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

如果我更改了该代码:

ClassPathResource resource = new ClassPathResource("testMediaExif");

变量absolutePath取以下值:

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

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

2 个答案:

答案 0 :(得分:17)

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

  1. classpath:前缀仅用于配置文件(例如XML文件),如果您直接使用ClasspathResource,则不应使用此前缀。
  2. classpath:testMediaExif指的是类路径根目录中的资源,而不是相对于您在其中进行引用的文件。
  3. 请改为尝试:

    new ClasspathResource("testMediaExif", getClass())
    

    new ClasspathResource("testMediaExif", MyClass.class)
    

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

    还有一件事: ClasspathResource.getFile()只能在资源中使用,实际上是一个文件。如果它被包装在JAR中,那么它就无法工作。

答案 1 :(得分:5)

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

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