spring - jar 内的文件对于 spring 不可见

标签 spring jar classpath

全部

我创建了一个 jar 文件,其中包含以下 MANIFEST.MF:

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 和其他依赖项是从单独的 jar 中加载的
  • spring 上下文已加载(new ClassPathXmlApplicationContext("spring-context/applicationContext.xml"))
  • my.properties 被加载到 PropertyPlaceholderConfigurer ("classpath:my.properties")
  • 如果我将 .config 文件放在文件系统之外,并将资源 url 更改为“file:”,一切似乎都很好......

有什么建议吗?

最佳答案

如果你的 spring-context.xml 和 my.config 文件在不同的 jar 中,那么你需要使用 classpath*:my.config?

更多信息 here

另外,确保从 jar 文件中加载时使用的是 resource.getInputStream() 而不是 resource.getFile()

关于spring - jar 内的文件对于 spring 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876836/

相关文章:

java - 从java程序运行一个jar文件

Java代理忽略应用程序类路径

java - JPA Hibernate 驼峰字段

java - Spring websocket STOMP 取消订阅 eventHandler

java - ProcessBuilder:启动java包中的.jar

java - 由于 javaml 依赖性失败,无法构建 gradle 项目

java - 调用 bazel 构建的 java 程序的原始命令行是什么?

java - 在Mac上为lucene设置java类路径

java - 从 Spring REST Web 服务以 JSON/XML 形式抛出异常

java - Spring REST,用户资源和密码