Maven多模块构建报错:无法找到跨模块资源StartupConfiguration
解决方案
1. 依赖WebREST模块的资源(推荐)
在Maven多模块项目中,模块间可通过依赖共享资源。你可以在ConfigurationEngine模块的pom.xml中添加对WebREST模块的依赖,根据需求指定作用域,同时确保WebREST模块的资源被正确打包进jar。
- 修改ConfigurationEngine的
pom.xml:
<dependencies> <!-- 依赖WebREST模块 --> <dependency> <groupId>你的项目groupId</groupId> <artifactId>WebREST</artifactId> <version>项目版本号</version> <!-- 仅测试用例需要则用test scope,主代码也需要则去掉此行 --> <scope>test</scope> </dependency> </dependencies>
- 检查WebREST模块的
pom.xml,确保自定义资源目录被配置(默认src/main/resources会自动打包,src/main/prod需手动添加):
<build> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/prod</directory> </resource> </resources> </build>
配置完成后,WebREST打包时会包含两个目录的资源,ConfigurationEngine在对应阶段就能通过依赖访问到这些资源。
2. 提取共享资源到独立模块
如果该资源是多个模块共用的,更规范的做法是将其迁移到专门的资源模块(比如common-resources),再让ConfigurationEngine和WebREST都依赖这个模块。
- 操作步骤:
- 创建新模块
common-resources,将StartupConfiguration资源放入该模块的src/main/resources目录。 - 在WebREST和ConfigurationEngine的
pom.xml中添加依赖:
- 创建新模块
<dependency> <groupId>你的项目groupId</groupId> <artifactId>common-resources</artifactId> <version>项目版本号</version> <!-- 根据实际需求指定scope --> </dependency>
这种方式符合Maven模块化设计思想,避免资源分散维护,后续其他模块需要时可直接依赖。
3. 用Maven资源插件自动复制资源
如果不想调整依赖结构,可借助maven-resources-plugin在ConfigurationEngine的测试阶段自动从WebREST模块复制资源到测试类路径,无需手动操作。
在ConfigurationEngine的pom.xml的build节点下添加:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-test-resources</id> <phase>process-test-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.testOutputDirectory}</outputDirectory> <resources> <resource> <directory>${project.parent.basedir}/WebREST/src/main/resources</directory> <includes> <include>StartupConfiguration*</include> </includes> </resource> <resource> <directory>${project.parent.basedir}/WebREST/src/main/prod</directory> <includes> <include>StartupConfiguration*</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins>
执行mvn package时,插件会自动将指定资源复制到ConfigurationEngine的测试类路径中。
内容的提问来源于stack exchange,提问作者Thom
相关产品推荐
相关产品推荐

