代码之家  ›  专栏  ›  技术社区  ›  Tarnschaf

更改Maven failsafe预集成测试的工作目录以查找Spring配置

  •  0
  • Tarnschaf  · 技术社区  · 6 年前

    我们有一个包含多个可执行项目的多模块Maven项目。

    目录结构如下所示:

    parent
    +- module1
    +-- src/main/resources/application.yml
    +-- config/bootstrap.yml
    +-- config/application-dev.yml
    +-- config/application-prod.yml
    +-- pom.xml
    +- pom.xml
    

    哪里 application.yml 不是特定于环境的打包默认值,并且 config 文件夹属于外部配置,仅用于不属于WAR文件的本地开发。

    现在,如果我从IDE启动应用程序或测试,它将按预期工作。另外,如果我运行Maven构建 module1 文件夹。但是,如果我尝试构建父项目,则 bootstrap.yml pre-integration-test 阶段。

    我发现工作目录被设置为父文件夹而不是 模块1 当春天来临的时候 . ./config . 如果我将配置文件夹复制到根目录,它在所有情况下都可以工作。

    有没有办法告诉Maven failsafe在 预集成测试 Spring上下文查找配置的阶段?

    parent/pom.xml :

    <project ...>
        <properties>
            <maven.version>3.0.0</maven.version>
            <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
            <maven-failsafe-plugin.version>2.20.1</maven-failsafe-plugin.version>
        </properties>
        <modules>
            <module>module1</module>
        </modules>
    
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <version>${maven-failsafe-plugin.version}</version>
                        <configuration>
                            <runOrder>alphabetical</runOrder>
                            <includes>
                                <include>**/*IntTest.java</include>
                            </includes>
                            <skipTests>${skipTests}</skipTests>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </project>
    

    parent/module1/pom.xml :

    <project>
        <parent>
            ...
        </parent>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                </plugin>
                </plugins>
            </plugins>
        </build>
    </project>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Tarnschaf    6 年前

    好吧,不知为什么 <environmentVariables> <systemProperties> <config> maven-failsafe-plugin 不能与 spring-boot-maven-plugin .

    SpringBoot插件似乎负责在 pre-integration-test 阶段,因为此片段:

            <execution>
                <id>pre-integration-test</id>
                <goals>
                    <goal>start</goal>
                </goals>
            </execution>
    

    我通过配置 spring boot maven插件 相反:

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <workingDirectory>${basedir}</workingDirectory>
    

    根据文件 ${basedir} 应该是默认的,但可能不适用于Maven多模块项目。