Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改Maven故障保护预集成测试的工作目录以查找Spring配置_Java_Spring_Maven_Spring Boot_Maven Failsafe Plugin - Fatal编程技术网

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

Java 更改Maven故障保护预集成测试的工作目录以查找Spring配置,java,spring,maven,spring-boot,maven-failsafe-plugin,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文件夹中的所

我们有一个多模块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
,该项目在
预集成测试
阶段构建失败

我发现工作目录被设置为父文件夹,而不是
module1
,这似乎是Spring在
/config
中查找的问题。如果我将config文件夹复制到root,它在所有情况下都能工作

在Spring上下文查找配置的
预集成测试阶段,是否有任何方法告诉Maven failsafe将工作目录设置到模块文件夹

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>
<project>
    <parent>
        ...
    </parent>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            </plugins>
        </plugins>
    </build>
</project>

好的,由于某种原因,
maven故障保护插件
块中的
都不能与
spring boot maven插件
组合使用

spring boot插件似乎负责在集成前测试阶段创建(分叉的)JVM,因为这个代码段:

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

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

请显示您的pom文件,听起来好像您做错了什么……pom文件相当大,我希望我添加了相关摘录
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <workingDirectory>${basedir}</workingDirectory>