依赖模块在IT模块中使用时加载资源失败
Dependency module fails to load resource when used in the IT module
我正在开发一个包含服务和集成测试模块的多模块项目。
在服务模块中,有一些重置密码功能的服务,基于 Spring greenhouse,它使用一个模板文件,预计在初始化时加载。在尝试解决此问题时,我根据加载的文件稍微更改了 class 的初始化,并将其移至 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>
mainSubmoduleA:
..............
<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>
...............
subModuleAA:
<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>
克里斯,
尝试在没有任何 ant 风格的通配符匹配器的情况下设置资源值。即:
<value>META-INF/spring/reset-password.st</value>
有关通配符限制的更多信息可在此处找到:Other notes relating to wildcards
我正在开发一个包含服务和集成测试模块的多模块项目。 在服务模块中,有一些重置密码功能的服务,基于 Spring greenhouse,它使用一个模板文件,预计在初始化时加载。在尝试解决此问题时,我根据加载的文件稍微更改了 class 的初始化,并将其移至 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>
mainSubmoduleA:
..............
<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>
...............
subModuleAA:
<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>
克里斯,
尝试在没有任何 ant 风格的通配符匹配器的情况下设置资源值。即:
<value>META-INF/spring/reset-password.st</value>
有关通配符限制的更多信息可在此处找到:Other notes relating to wildcards