https://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html
我有一个项目,有2个模块 .
[Parent]
|-pom.xml
| [SpringBoot2App]
| |-pom.xml
| [test]
| |-pom.xml (start goal here!)
我想在一个单独的项目中运行集成测试(maven failsafe插件),这是另一个模块 .
在父模块的集成测试期间,是否可以配置spring boot maven插件来启动/停止子模块?
我尝试过这样的事情没有成功
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.SimpleServiceApplication</mainClass>
<classesDirectory>../SpringBoot2App/target/classes</classesDirectory>
<folders>
<param>../SpringBoot2App/target/test-classes</param>
</folders>
</configuration>
<executions>
<execution>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
</execution>
</executions>
</plugin>
哪个不起作用 .
我还尝试在读取插件的超类源https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractRunMojo.java后添加"project"参数
<configuration>
<mainClass>com.SimpleServiceApplication</mainClass>
<project>${project.parent.collectedProjects[0]}</project>
</configuration>
这指的是正确的项目,如调试所示,但也不起作用 .
请不要评论[0],我知道[0]不干净,是一个需要直接了解父pom模块排序的耦合 .
我在org / springframework / boot / SpringApplication上得到一个java.lang.NoClassDefFoundError
我将starter-web项目添加到测试pom.xml,结果相同
2 回答
我不能使用
spring-boot-maven-plugin
对另一个模块运行集成测试,因为start
目标似乎没有为您提供从本地存储库或Maven反应堆解析应用程序的方法,这可能是您想要的 .project
配置属性,您设计为以这种方式覆盖 . 应仅使用插件目标docs中列出的属性配置插件执行 .相反,我认为你至少有两种可能的方法:
使用其他插件来控制服务器;要么
直接从代码中的测试运行服务器 .
选项1
为此,我认为你需要一种方法来复制你想要运行的服务器工件,以及一些更通用的启动和停止它的方法,比如cargo-maven2-plugin或process-exec-maven-plugin .
只需在服务器工件构建中配置
repackage
目标:然后从集成测试模块中,您可以执行以下操作:
选项2
只需从测试工件声明服务器工件的正常Maven依赖关系,然后在挂钩之前在JUnit中运行服务器的
@SpringBootApplication
类,或者你有什么,例如:这可能足以满足您的需求 .
RyanP的解决方案完全符合需求 .
但是,我确实设法使它工作,运气不好我猜:)
它需要在TEST模块中重新添加运行应用程序所需的依赖项 . (在这种情况下,spring-boot.starter-web)
添加测试类,需要一个非常有趣的语法
到目前为止,优点是我可以在正在运行的服务器上运行测试,但仍然使用配置文件和服务的测试类来模拟一些服务 .
老实说,我仍然会尝试上面的两个解决方案,但仅仅是为了节目,这就是我最终的工作
和...