当前位置: 首页 > 知识库问答 >
问题:

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

越伟泽
2023-03-14

我有一个maven项目,其结构如下

- Root pom.xml
    - module1
    - module2

Module2是一个集成测试模块,使用Spring Boot注释-

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

module2依赖于module1,当项目使用spring boot maven插件构建时,它被重新打包,module2在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的执行默认:sping-boot-maven-plugin4.6.18。RELEASE: repack ag e失败:无法找到主类

如何解决这个问题?在进行spring启动和集成测试时,项目结构的最佳实践是什么?

共有1个答案

姜嘉荣
2023-03-14

我用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。重新包装跳过

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

 类似资料:
  • 我正在使用一个带有spring boot 2.0.0.rc1的多项目分级器。我的子项目之一是SpringBoot应用程序,其中包含了我的集成测试。 集成测试用WebEnvironment.random_port标记为@springboottest。由于未解析的依赖关系(在另一个子项目中声明的服务,的同级),测试失败,使用了gradle命令行,但在Eclipse IDE中成功。 如果有人有主意?如何

  • 我的应用程序中使用了弹性城堡依赖项,我希望在pom.xml文件中排除此依赖项。即使从pom文件中删除此依赖项,它仍然出现在m2存储库文件夹中。我的应用程序是Spring-MVC 5框架,运行在Tomcat版本9上。部署时有两个不同版本的“bcprov”。我需要从pom.xml文件中排除bcprov-jdk14和bcprov-jdk15on。 下面是pom文件中的依赖关系。 我还尝试了另一个链接的排

  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目

  • 麻烦问下,我现在是已经安装好了node包的依赖,如何需要run dist,变异之后再运行,现在问题就是在run dist的时候,报上图的错误,很明显的是缺少了一个v,请问这个怎么处理呢, angular项目

  • 我正在尝试扩展TestBase类,但找不到以下项的正确依赖关系: 我不太熟悉Maven,但在pom.xml中添加了以下依赖项: 我希望olwapi-contract依赖项包含测试包。但是,在我的Maven依赖项下,我只看到以下内容:

  • 本文向大家介绍详解springboot解决第三方依赖jar包的问题,包括了详解springboot解决第三方依赖jar包的问题的使用技巧和注意事项,需要的朋友参考一下 公司现在用的是springboot+maven,想要把一些老的项目都改成这种框架。但是一些老的项目中有好多第三方的jar包或者是自己的jar包,maven库上没有。最初的解决方案是一个个的deploy到maven库上,但是遇到太多的