我有一个数据项目和一个UI项目。这两个项目都是Spring Boot应用程序。这两个项目都有相同的根包(com.myorg),主类带有注释@SpringBootApplication。
@SpringBootApplication
数据项目的主要类别是:
package com.myorg; @SpringBootApplication public class DataApplication { public static void main(String[] args) { SpringApplication.run(DataApplication.class, args); } }
UI项目的主要类是:
package com.myorg; @SpringBootApplication public class UiApplication { public static void main(String[] args) { SpringApplication.run(UiApplication .class, args); } }
UI项目通过以下Gradle依赖项依赖于数据项目:
dependencies { compile('com.myorg:data:1.0') }
如果我运行UI应用程序,它将运行没有问题。但是,如果我在UI应用程序中运行集成测试,如下所示:
package com.myorg @RunWith(SpringRunner.class) @SpringBootTest public class UiIntTest { @Test public void contextLoads() { } }
发生以下初始化错误:
java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes
在数据项目的主类中,如果我替换@SpringBootApplication为
@Configuration @EnableAutoConfiguration @ComponentScan({ "com.myorg" })
尝试运行其集成测试时收到以下初始化错误:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
例如,如果我尝试运行:
package com.myorg @RunWith(SpringRunner.class) @SpringBootTest public class DataIntTest { @Test public void contextLoads() { } }
如何正确配置数据和UI项目?
您需要指定要使用的Spring Boot Main类以及@SpringBootTest:
@SpringBootTest
@SpringBootTest(classes = YourUiSpringBootApp.class)