【问题标题】:Dependency module fails to load resource when used in the IT module依赖模块在 IT 模块中使用时加载资源失败
【发布时间】:2015-02-07 23:30:02
【问题描述】:

我正在开发一个包含服务和集成测试模块的多模块项目。 在服务模块中有一些重置密码功能的服务,基于Spring greenhouse,它使用了一个模板文件,预计在初始化时加载。在尝试解决此问题时,我根据加载的文件稍微更改了类的初始化并将其移至 xml 配置:

<bean id="resetPasswordMailMessageConverter" class="com.myapp.service.reset.ResetPasswordMailMessageConverter">
    <constructor-arg name="resource">
        <value>classpath*:**/spring/reset-password.st</value>
    </constructor-arg>
</bean>

服务在 tomcat 中部署和使用后运行良好,但在执行集成测试时出现问题:Unable to read template resource class path resource [classpath*:**/spring/reset-password.st] 我把那个文件放在serviceModule/META-INF/spring/integrationTestsModule/META-INF/spring/这两个地方,但还是找不到。

我在服务和集成测试中都放置了一些代码,并在其中导出了ClassLoader.getSystemResources("META-INF") 的结果,并注意到在这两种情况下integrationModule/target/test-classes/META-INF.m2/repository/../serviceModule.jar!META-INF 都包含在导出的路径中,并且文件包含在其中META-INF/spring/ 都没有找到。

我还尝试将文件与转换器保存在同一个包中,并将转换器的资源初始化为new ClassPathResource("reset-password.st", getClass().getClassLoader())new ClassPathResource("reset-password.st"),但没有成功。

项目结构为mainModule->[mainSubmoduleA->[serviceModule,integrationTestsModule,etc],mainSubmoduleB[其他模块]]

有什么想法吗?

有一个项目结构的基本布局

部分 pom 文件:

主要:

...........

<groupId>com.myapp</groupId>
<artifactId>mainModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
.............
<modules>
    <module>mainSubmoduleA</module>
    <module>mainSubmoduleB</module>
</modules>

主子模块A:

..............
<parent>
    <groupId>com.myapp</groupId>
    <artifactId>mainModule</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
.........

<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp.mainsuba</groupId>
<artifactId>mainSubmoduleA</artifactId>
<packaging>pom</packaging>
<name>mainSubmoduleA</name>
..........

<modules>
  <module>subModuleAA</module>
</modules>
...............

子模块AA:

<parent>
  <groupId>com.myapp.mainsuba</groupId>
  <artifactId>mainSubmoduleA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp.mainsuba.subaa</groupId>
<artifactId>subModuleAA</artifactId>
<packaging>pom</packaging>
<name>subModuleAA</name>
..........

<modules>
  <module>service</module>
  <module>web</module>
  <module>integration</module>
</modules>

服务:

<parent>
  <groupId>com.myapp.mainsuba.subaa</groupId>
  <artifactId>subModuleAA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp.mainsuba.service</groupId>
<artifactId>service</artifactId>
<packaging>jar</packaging>
<name>service</name>

网络:

<parent>
  <groupId>com.myapp.mainsuba.subaa</groupId>
  <artifactId>subModuleAA</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp.mainsuba.web</groupId>
<artifactId>web</artifactId>
<packaging>war</packaging>
<name>web</name>

整合:

<parent>
  <groupId>com.myapp.mainsuba.subaa</groupId>
  <artifactId>subModuleAA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>integration</artifactId>
<packaging>jar</packaging>
<name>integration</name>
<description>Integration Tests</description>

【问题讨论】:

  • 你能显示你的文件夹布局和你的 pom 文件吗...
  • @khmarbaise 我丰富了描述,希望对您有所帮助..

标签: spring maven resources multi-module


【解决方案1】:

克里斯,

尝试在没有任何 ant 风格的通配符匹配器的情况下设置资源值。即:

<value>META-INF/spring/reset-password.st</value>

更多关于通配符限制的信息可以在这里找到:Other notes relating to wildcards

【讨论】:

  • 谢谢@anestis-georgiadis,看起来我几乎什么都试过了 :)
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 2019-11-04
  • 2016-04-25
  • 2017-04-23
  • 1970-01-01
  • 2021-07-09
相关资源
最近更新 更多