Spring Boot maven插件找不到主类,无法执行java
我有一个多模块maven spring booot maven项目。其中一个子模块是存根(一个spring boot应用程序),我想在集成测试myRealApp时启动它,然后停止它Spring Boot maven插件找不到主类,无法执行java,java,maven,spring-boot,spring-boot-maven-plugin,Java,Maven,Spring Boot,Spring Boot Maven Plugin,我有一个多模块maven spring booot maven项目。其中一个子模块是存根(一个spring boot应用程序),我想在集成测试myRealApp时启动它,然后停止它 Parent Pom | |----myRealApp module(spring boot app) |----stub-of-some-remote-rest-api module(This is also a spring-boot app) 这是模块myRealApp中pom文件的外观。它也有所有的集
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub-of-some-remote-rest-api module(This is also a spring-boot app)
这是模块myRealApp中pom文件的外观。它也有所有的集成测试。它试图在集成测试前阶段启动存根模块。但是,当我在子模块目录中运行maven goal时,出现了错误:
mvn integration-tests -X
错误:无法找到或加载主类io.swagger.MyStub
org.apache.maven.lifecycle.LifecycleExecutionException:未能
执行
目标org.springframework.boot:springbootmaven插件:1.5.8.RELEASE:run
项目上的(启动启动):无法执行java
在调试模式下,我可以看到工作目录设置正确
myRealApp的Pom:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${spring.boot.mainclass}</mainClass>
</configuration>
<executions>
<execution>
<configuration>
<workingDirectory>${project.parent.basedir}/module-of-my-stub/src/main/java</workingDirectory>
<mainClass>io.swagger.MyStub</mainClass>
</configuration>
<id>start-boot</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>stop-boot</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
org.springframework.boot
springbootmaven插件
${spring.boot.mainclass}
${project.parent.basedir}/mystub/src/main/java的模块
伊奥·斯威格·迈斯图
启动引导
预集成测试
跑
停止启动
整合后测试
停止
构建信息
也许我不允许在单个执行中设置workingDirectory,或者引用其他模块
存根就像我的应用程序所依赖的远程rest服务一样,我在开发过程中使用了它,因为实际的远程服务的测试环境不可靠,并且有一半时间停机。所以决定也在集成测试中使用它。
springboot:run
仅适用于打包springboot应用程序的项目。实现此功能的最佳选项:您需要使用,确保async
设置为true
。查看以了解您应该如何配置插件。为了整合针对该问题的一些评论,这些评论基本上遵循了中的建议
关键是针对springbootmaven插件:run
goal设置classesDirectory
,以指向另一个项目下的target\classes
目录
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${spring.boot.mainclass}</mainClass>
</configuration>
<executions>
<execution>
<id>start-stub</id>
<configuration>
<arguments>
<argument>--server.port=8090</argument>
</arguments>
<mainClass>io.swagger.Stub</mainClass>
<classesDirectory>../my-stub/target/classes</classesDirectory>
</configuration>
<goals>
<goal>start</goal>
</goals>
<phase>pre-integration-test</phase>
</execution>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
org.springframework.boot
springbootmaven插件
${spring.boot.mainclass}
起始存根
--server.port=8090
伊奥·斯威格·斯图克
../my stub/target/classes
开始
预集成测试
构建信息
为什么要将spring boot maven插件配置为不同的执行?如果您喜欢编写集成测试,那么这很容易……此外,为什么要使用这样一个奇怪的目录/my stub/src/main/java
?请遵循Maven的约定和Spring Boot的约定…此外,您应该阅读关于测试Spring Boot应用程序的指南,因为没有必要为Spring Boot应用程序编写存根…@khmarbaise存根就像我的应用程序所依赖的远程rest服务一样,我在开发过程中使用了它,因为实际的远程服务的测试环境不可靠,并且有一半的时间处于停机状态。那么为什么不在集成测试中也使用它呢?为什么它是一个奇怪的目录?我试图从我的应用程序中找到存根模块的主类。恐怕你不明白我的问题。@khmarbaise我更新了问题,理想情况下,有一种方法可以将存根的模块
依赖项添加到spring boot maven plugin:run
goal使用的类路径中。看起来没有直接的方法,尽管有一个选择。还讨论了另一种方法。反过来说,这是推测。其思想是,通过将stub的模块的测试依赖项添加到myRealApp
,然后将useTestClasspath
添加到现有的spring boot maven plugin:run
配置中,这将使MyStub
在类路径上可见。否则,上面链接中的classesDirectory
技巧应该能够将其指向我存根的模块下的target/classes
目录。