使用spring-boot-maven-plugin的repackage时找不到Spring Boot类
Spring Boot多模块Maven构建:集成测试找不到应用类的问题
我创建了一个示例项目来复现问题,这是一个Maven多模块(反应堆)项目,仅包含两个核心部分:
- my-project-application模块中的Spring Boot应用类
MyProjectApplication - my-project-integrationtest模块中的Spring Boot测试类
MyProjectFacadeIntegrationTest
项目目录结构如下:
testing-spring-boot-app (根/父Maven模块) |- my-project-application (Maven模块) | \- src/main/java/org/myproject/MyProjectApplication.java \- my-project-integrationtest (Maven模块) \- src/test/java/org/myproject/MyProjectFacadeIntegrationTest.java
my-project-integrationtest模块依赖my-project-application模块,集成测试类MyProjectFacadeIntegrationTest需要借助MyProjectApplication来启动Spring Boot应用。
在IDE中执行测试完全正常,但用Maven构建时却出现编译错误,提示找不到MyProjectApplication类,错误日志如下:
[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /C:/tmp/testing-spring-boot-app/my-project-integrationtest/src/test/java/org/myproject/MyProjectFacadeIntegrationTest.java:[7,40] cannot find symbol symbol: class MyProjectApplication location: package org.myproject [INFO] 1 error [INFO] -------------------------------------------------------------
经过排查,这个问题和spring-boot-maven-plugin直接相关——我们的真实项目必须使用这个插件,但如果注释掉my-project-application/pom.xml中插件配置的repackage目标,Maven构建就能正常运行。
我想请教几个问题:
- 为什么会出现这种情况?
repackage目标到底执行了哪些操作?- 这种行为是插件的预期设计吗?有没有解决方案或变通方法,能让我在保留
repackage目标的前提下正常运行集成测试?
PS:当然,我可以把Spring Boot测试放在应用模块里,这样一切都能正常工作。但我的真实项目规模很大,包含多个Maven模块,单独用一个模块来存放Spring Boot应用是合理的(它包含了真实应用的所有依赖等)。所以请不要建议我把测试类移到应用模块中;-)
内容的提问来源于stack exchange,提问作者Chris Brown
相关产品推荐
相关产品推荐

