更改Maven故障安全预集成测试的工作目录以查找Spring配置

时间:2018-08-02 13:17:34

标签: java spring maven spring-boot maven-failsafe-plugin

我们有一个包含多个可执行项目的多模块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启动应用程序或测试,它将按预期工作。另外,如果我在module1文件夹中运行Maven版本。但是,如果我尝试构建父项目,则找不到bootstrap.yml,这会在pre-integration-test阶段使构建失败。

我发现工作目录被设置为父文件夹而不是module1,这似乎是Spring在../config中看起来的问题。如果我将config文件夹复制到root,则在所有情况下都可以使用。

pre-integration-test阶段,Spring Context寻找配置时,有什么方法可以告诉Maven故障安全设置工作目录到模块文件夹吗?

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 个答案:

答案 0 :(得分:0)

好吧,出于某些原因,<environmentVariables>的{​​{1}}块中的<systemProperties><config>不能与maven-failsafe-plugin结合使用。

由于该代码段,看来Spring-boot插件负责在spring-boot-maven-plugin阶段创建(分叉的)JVM:

pre-integration-test

我通过配置 <execution> <id>pre-integration-test</id> <goals> <goal>start</goal> </goals> </execution> 来解决它:

spring-boot-maven-plugin

根据文档 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <workingDirectory>${basedir}</workingDirectory> 应该是默认设置,但可能不适用于Maven多模块项目。