里面的文件是不可见的spring
所有
我用下面的MANIFEST.MF创build了一个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>
如果我运行的jar,一切看起来很好,除了加载该特定的文件:
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
- 类从jar中加载
- spring和其他依赖从被分离的瓶子加载
- 加载spring上下文(新的ClassPathXmlApplicationContext(“spring-context / applicationContext.xml”))
- my.properties被加载到PropertyPlaceholderConfigurer(“classpath:my.properties”)
- 如果我把我的.config文件放在文件系统之外,并将资源url更改为“file:”,一切似乎都没有问题。
有小费吗?
如果你的spring-context.xml和my.config文件在不同的jar中,那么你将需要使用classpath*:my.config
?
更多信息在这里
此外,请确保在从jar文件中加载时使用resource.getInputStream()
而不是resource.getFile()
。
我知道这个问题已经被回答了。 但是,对于那些使用弹簧引导,这个链接帮助我 – https://smarterco.de/java-load-file-classpath-spring-boot/
但是, resourceLoader.getResource("classpath:file.txt").getFile();
是造成这个问题和sbk的评论:
而已。 java.io.File表示文件系统上的目录结构中的文件。 Jar是一个java.io.File。 但是该文件中的任何内容都超出了java.io.File的范围。 就Java而言,直到它被解压缩之前,jar文件中的类与word文档中的一个词没有区别。
帮我理解了为什么要使用getInputStream()来代替。 现在适合我!
谢谢!
当使用Tomcat6.x时,我遇到了类似的问题,而且我发现的build议没有任何帮助。 最后,我删除了(Tomcat的) work
文件夹,问题没有了。
我知道这是不合逻辑的,但为了文件的目的…