gpt4 book ai didi

java - Maven、Spring Boot - 包依赖问题、集成测试

转载 作者:行者123 更新时间:2023-12-05 07:32:58 27 4
gpt4 key购买 nike

我有一个具有以下结构的ma​​ven 项目

- Root pom.xml
- module1
- module2

module2 是一个使用 Spring Boot 注解的集成测试模块 -

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Config.class, webEnvironment = RANDOM_PORT)

module2 依赖于module1,当使用spring-boot-maven-plugin 构建项目时,它被重新打包并且module2 cannot find packagesmodule1 中; This can be solved using the classifier as follows

<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 现在正在使用原始 Artifact 并且不是重新包装的。

Execution default of goal org.springframework.boot:spring-boot-maven-plugin4.6.18.RELEASE:repackag e failed: Unable to find main class

当涉及到 spring boot 和集成测试时,如何解决这个问题?项目结构的最佳实践是什么?

最佳答案

我用 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 调用。可能有我不知道的更清洁的解决方案。

关于java - Maven、Spring Boot - 包依赖问题、集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com