복붙노트

[SPRING] 항아리 안의 파일은 봄에 보이지 않습니다.

SPRING

항아리 안의 파일은 봄에 보이지 않습니다.

모든

다음 MANIFEST.MF 파일이있는 jar 파일을 만들었습니다.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_25-b06 (Sun Microsystems Inc.)
Main-Class: my.Main
Class-Path: . lib/spring-core-3.2.0.M2.jar lib/spring-beans-3.2.0.M2.jar

그 루트에는 my.config라는 파일이 있습니다.이 파일은 다음과 같이 spring-context.xml에서 참조됩니다.

<bean id="..." class="...">
    <property name="resource" value="classpath:my.config" />
</bean>

항아리를 실행하면 해당 특정 파일을로드하는 것 외에는 문제가없는 것처럼 보입니다.

Caused by: java.io.FileNotFoundException: class path resource [my.config] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/work/my.jar!/my.config
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:205)
    at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
    at eu.stepman.server.configuration.BeanConfigurationFactoryBean.getObject(BeanConfigurationFactoryBean.java:32)
    at eu.stepman.server.configuration.BeanConfigurationFactoryBean.getObject(BeanConfigurationFactoryBean.java:1)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
    ... 22 more

어떤 팁?

해결법

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

    1.spring-context.xml과 my.config 파일이 다른 jar 파일에 있으면 classpath * : my.config?

    spring-context.xml과 my.config 파일이 다른 jar 파일에 있으면 classpath * : my.config?

    여기에 대한 자세한 정보

    또한 jar 파일 내부에서로드 할 때 resource.getFile ()이 아닌 resource.getInputStream ()을 사용하고 있는지 확인하십시오.

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

    2.나는이 질문이 이미 응답 된 것을 안다. 그러나 스프링 부트를 사용하는 사람들에게는이 링크가 도움이되었습니다. - https://smarterco.de/java-load-file-classpath-spring-boot/

    나는이 질문이 이미 응답 된 것을 안다. 그러나 스프링 부트를 사용하는 사람들에게는이 링크가 도움이되었습니다. - https://smarterco.de/java-load-file-classpath-spring-boot/

    그러나 resourceLoader.getResource ( "classpath : file.txt"). getFile (); 이 문제와 sbk의 의견을 일으켰습니다 :

    대신 getInputStream ()을 사용하는 이유를 이해할 수있었습니다. 그것은 나를 위해 지금 일한다!

    감사!

  3. ==============================

    3.스프링 항아리 패키지에서는 새로운 ClassPathResource (filename) .getFile ()을 사용하여 예외를 throw합니다.

    스프링 항아리 패키지에서는 새로운 ClassPathResource (filename) .getFile ()을 사용하여 예외를 throw합니다.

    그러나 새로운 ClassPathResource (filename) .getInputStream ()을 사용하면이 문제를 해결할 수 있습니다. 그 이유는 jar의 구성 파일이 운영 체제의 파일 트리에 존재하지 않기 때문에 getInputStream ()을 사용해야하기 때문입니다.

  4. ==============================

    4.Tomcat6.x를 사용할 때도 비슷한 문제가 있었지만 도움이되는 조언이 없었습니다. 결국 (Tomcat의) 작업 폴더를 삭제하고 문제가 사라졌습니다.

    Tomcat6.x를 사용할 때도 비슷한 문제가 있었지만 도움이되는 조언이 없었습니다. 결국 (Tomcat의) 작업 폴더를 삭제하고 문제가 사라졌습니다.

    나는 그것이 비논리적이지만 문서화 목적으로 사용된다는 것을 안다.

  5. from https://stackoverflow.com/questions/14876836/file-inside-jar-is-not-visible-for-spring by cc-by-sa and MIT license