복붙노트

[SPRING] ClassPathResource가 클래스 경로를 가져 오지 않습니다.

SPRING

ClassPathResource가 클래스 경로를 가져 오지 않습니다.

내 응용 프로그램에서는 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

목표 경로를 가리키는 이유는 무엇입니까? 어떻게 바꿀 수 있니?

해결법

  1. ==============================

    1.내 생각 엔 절대 경로 문제는 당신의 메이븐 POM 타겟에있는 outputDirectory 때문이다. 내 프로젝트에서 outputDirectory war / WEB-INF / classes 그리고 여기에서 클래스가 실행됩니다. 정크 값으로 변경하면 더 이상 클래스가 실행되지 않습니다.

    내 생각 엔 절대 경로 문제는 당신의 메이븐 POM 타겟에있는 outputDirectory 때문이다. 내 프로젝트에서 outputDirectory war / WEB-INF / classes 그리고 여기에서 클래스가 실행됩니다. 정크 값으로 변경하면 더 이상 클래스가 실행되지 않습니다.

    따라서 절대 경로는 .class 파일의 위치를 ​​사용하여 무언가를해야한다고 생각합니다. 희망이 도움이됩니다.

  2. ==============================

    2.새 ClassPathResource ( "classpath : testMediaExif")에는 두 가지 문제가 있습니다.

    새 ClassPathResource ( "classpath : testMediaExif")에는 두 가지 문제가 있습니다.

    대신 다음을 시도하십시오.

    new ClasspathResource("testMediaExif", getClass())
    

    또는

    new ClasspathResource("testMediaExif", MyClass.class)
    

    이것들은 MyClass를 기준으로 할 경우 testMedia라는 리소스에 대한 참조를 구성합니다.

    한 가지 더 : ClasspathResource.getFile ()은 리소스에서 실제로 작동합니다. 파일입니다. JAR에 압축되어 있으면 작동하지 않습니다.

  3. from https://stackoverflow.com/questions/8725149/classpathresource-does-not-get-the-classpath by cc-by-sa and MIT license