我有一个多模块 Maven 项目,其中包含一个由多个 Spring Boot 服务组成的应用程序。我正在尝试为服务设置集成和端到端测试,并使用 Maven 插件组合来编排此操作。
我有一个模块,旨在仅包含执行某些工作的一组协作服务的端到端测试。它仅包含测试代码和资源。我使用故障安全插件 (
org.apache.maven.plugins:maven-failsafe-plugin
) 执行集成测试,使用 Spring Boot Maven 插件 (org.springframework.boot:spring-boot-maven-plugin
) 启动和停止“主”服务,使用 Maven exec 插件 (org.codehaus.mojo:exec-maven-plugin
) 启动端到端测试中正在使用的其他服务。
我遇到了一个似乎与 Spring Boot 插件的
repackage
目标相关的问题。 e2e模块没有任何需要重新打包的东西,所以我想跳过这个目标。应该不会太难吧?
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
<execution>
...
好吧,这行不通。尽管如此,它仍然运行重新打包。
这个问题是 Maven 构建失败,因为它找不到要重新打包的“主”类(我相信作为可执行 jar)。嗯,这个模块没有主类。
更重要的问题是:为什么
<skip>true</skip>
被忽略了?
您需要在
<id>repackage</id>
标签之后、<execution>
标签之前添加 <goals>
。
所以整个事情就变成了:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
我也面临着同样的问题。我通过使用上面的
<pluginManagement>
标签解决了这个问题 <plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>