【问题标题】:Change working directory for Maven failsafe pre-integration-test to find Spring configuration更改 Maven 故障安全预集成测试的工作目录以查找 Spring 配置
【发布时间】:2018-08-02 13:17:33
【问题描述】:

我们有一个多模块 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 中查找的问题。如果我将配置文件夹复制到根目录,它适用于所有情况。

在 Spring Context 查找配置的pre-integration-test 阶段,有什么方法可以告诉 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>

【问题讨论】:

  • 请出示你的 pom 文件,听起来你做错了什么......
  • POM 文件比较大,我希望我添加了相关的摘录

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


【解决方案1】:

好的,由于某种原因,maven-failsafe-plugin&lt;config&gt; 块中的 &lt;environmentVariables&gt;&lt;systemProperties&gt; 不能与 spring-boot-maven-plugin 结合使用。

由于这个 sn-p,spring-boot 插件似乎负责在pre-integration-test 阶段创建(分叉的)JVM:

        <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>

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

【讨论】:

    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多