1. ホーム
  2. spring

[解決済み] Springでjar内のファイルが表示されない

2022-06-14 12:50:56

質問

すべて

以下の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>

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 にある場合、spring-context.xml と my.config ファイルを同じ場所に配置する必要があります。 classpath*:my.config ?

もっと詳しく こちら

また resource.getInputStream() ではなく resource.getFile() でなく、jarファイルの内部から読み込んだ場合。