Spring 启动 maven 插件找不到 main class,无法执行 java
Spring Boot maven plugin cant find main class, Could not exec java
我有一个多模块 maven spring-boot maven 项目。其中一个子模块是一个存根(一个 spring 引导应用程序),我想在 的集成测试期间启动然后停止 myRealApp.
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub-of-some-remote-rest-api module(This is also a spring-boot app)
这是 pom 文件在模块 myRealApp 中的样子。其中也有所有的集成测试。它试图在集成测试阶段之前启动存根模块。但是当我在子模块目录中 运行 maven 目标时出现错误:
mvn integration-tests -X
Error: Could not find or load main class io.swagger.MyStub
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to
execute
goal org.springframework.boot:spring-boot-maven-plugin:1.5.8.RELEASE:run
(start-boot) on project: Could not exec 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>
也许我不允许在单独的执行中设置workingDirectory,或者引用其他模块?
存根就像我的应用程序所依赖的远程休息服务一样,我在开发过程中使用它,因为实际的远程服务的测试环境不可靠,并且有一半的时间出现故障。所以决定也在集成测试中使用它。
spring-boot:run
只对打包spring boot应用的项目有效。实现此功能的最佳选择:您需要使用 exec-maven-plugin:exec, ensure that async
is set to true
. Look at https://www.mojohaus.org/exec-maven-plugin/examples/example-exec-for-java-programs.html 来查看应如何配置插件。
为了巩固一些针对问题的评论,这些基本上遵循了中的建议。
关键是根据 spring-boot-maven-plugin:run
目标将 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>
我有一个多模块 maven spring-boot maven 项目。其中一个子模块是一个存根(一个 spring 引导应用程序),我想在 的集成测试期间启动然后停止 myRealApp.
Parent Pom
|
|----myRealApp module(spring boot app)
|----stub-of-some-remote-rest-api module(This is also a spring-boot app)
这是 pom 文件在模块 myRealApp 中的样子。其中也有所有的集成测试。它试图在集成测试阶段之前启动存根模块。但是当我在子模块目录中 运行 maven 目标时出现错误:
mvn integration-tests -X
Error: Could not find or load main class io.swagger.MyStub
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.8.RELEASE:run (start-boot) on project: Could not exec 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>
也许我不允许在单独的执行中设置workingDirectory,或者引用其他模块?
存根就像我的应用程序所依赖的远程休息服务一样,我在开发过程中使用它,因为实际的远程服务的测试环境不可靠,并且有一半的时间出现故障。所以决定也在集成测试中使用它。
spring-boot:run
只对打包spring boot应用的项目有效。实现此功能的最佳选择:您需要使用 exec-maven-plugin:exec, ensure that async
is set to true
. Look at https://www.mojohaus.org/exec-maven-plugin/examples/example-exec-for-java-programs.html 来查看应如何配置插件。
为了巩固一些针对问题的评论,这些基本上遵循了
关键是根据 spring-boot-maven-plugin:run
目标将 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>