首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven,问题,集成测试

Maven,问题,集成测试
EN

Stack Overflow用户
提问于 2018-06-14 10:15:14
回答 1查看 211关注 0票数 3

我有一个具有以下结构的maven项目

代码语言:javascript
复制
- Root pom.xml
    - module1
    - module2

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

代码语言:javascript
复制
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Config.class, webEnvironment = RANDOM_PORT)

module2依赖于module1,当使用spring maven-plugin构建项目时,它被重新打包,找不到包在module1;这可以使用如下分类器来解决中。

代码语言:javascript
复制
<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的默认执行失败:找不到主类

如何解决这一问题,以及在春季启动和集成测试时项目结构的最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-02-16 17:40:58

我用maven配置文件解决了这个问题。在根pom中,我定义:

代码语言:javascript
复制
<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简单地说:

代码语言:javascript
复制
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

默认情况下,重新打包将运行。集成测试是使用单独的maven命令运行的,我在其中通过了-Dspring.repackage.skip

这有一个缺点,即它只适用于单独的Maven调用。也许有更清洁的解决方案,我不知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50855066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档