我有一个具有以下结构的maven项目
- Root pom.xml
- module1
- module2module2是一个使用Spring注释的集成测试模块-
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Config.class, webEnvironment = RANDOM_PORT)module2依赖于module1,当使用spring maven-plugin构建项目时,它被重新打包,找不到包在module1;这可以使用如下分类器来解决中。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>现在的问题是,当运行module2集成测试时,无法再找到主类,我猜想这是因为module2现在使用的是原始工件,而不是重新打包的工件。
目标org.springframework.boot:spring-boot-maven-plugin4.6.18.RELEASE:repackag e的默认执行失败:找不到主类
如何解决这一问题,以及在春季启动和集成测试时项目结构的最佳实践是什么?
发布于 2021-02-16 17:40:58
我用maven配置文件解决了这个问题。在根pom中,我定义:
<profiles>
<profile>
<id>skip-spring-repackaging</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>spring.repackage.skip</name>
</property>
</activation>
<modules>
<module>integration-tests</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<attach>false</attach>
</configuration>
<executions>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>spring-repackaging</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>在应用程序中,pom简单地说:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>默认情况下,重新打包将运行。集成测试是使用单独的maven命令运行的,我在其中通过了-Dspring.repackage.skip。
这有一个缺点,即它只适用于单独的Maven调用。也许有更清洁的解决方案,我不知道。
https://stackoverflow.com/questions/50855066
复制相似问题