无法从配置文件配置附加系统属性

Can not append system properties from profile config

我有 maven 故障安全插件的构建配置,其中包括 systemPropertyVariables:

<build>
  <plugins>
    <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.19.1</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <systemPropertyVariables>
            <buildDirectory>${project.build.directory}</buildDirectory>
          </systemPropertyVariables>
        </configuration>
      </plugin>
  </plugins>
</build>

我还有一个配置文件,可以通过 pluginManagement:

将一些属性附加到同一个插件
<profile>
  <id>test</id>
  <activation>
    <property>
      <name>test.host</name>
    </property>
  </activation>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <configuration>
            <systemPropertyVariables>
              <TEST_HOST>test.host</TEST_HOST>
            </systemPropertyVariables>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</profile>

但我无法从该配置文件中读取属性。如果我在构建插件配置部分删除 systemPropertyVariables 并保留配置文件的 pluginManagement 配置,它工作正常。好像一起使用的时候需要合并这些属性,所以我尝试在插件的configuration中添加combine.children="append"combine.self="append",但是没有用。

更新: 我找到了这个问题的原因:我没有提到我有父 pom,包括这个,父 pom.xml 有这些行:

      <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
        <groupId>org.apache.maven.plugins</groupId>
        <version>3.0.0-M3</version>
        <configuration combine.children="append"> 
          <systemProperties>
            <!-- some properties that I don't use -->
          </systemProperties>
        </configuration>
      </plugin>

并且这些父 pom 故障安全配置正在破坏我 pom.xml 中的所有配置 - 如果我删除父 pom 引用,故障安全属性将被正确包含。我不能只删除父 pom 引用并且不能修改它(实际上我可以分叉并编辑它,但这不是一件容易的事),是否可以覆盖这些属性,因为我不使用它们?

附加最小可复制项目:https://send.firefox.com/download/88dfb9f933c9567f/#71ij1jbuEuAYgdwIiZQZRg

我设法通过在 untouchable(或 pariah)父级和当前 child 之间添加一个额外的 pom 来做到这一点,我称之为新的中间 pom midboy =)

所以midboypariah只有以下区别;

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <groupId>org.apache.maven.plugins</groupId>
    <version>3.0.0-M3</version>
    <inherited>false</inherited>
</plugin>

并且此 pom 成为 child 的新父 pom,同时它使用原始 pariah pom 作为其父 pom。

child ---[继承]---> midboy ---[继承]---> pariah

使用 inherited:false 我基本上 cut-off 故障安全插件被传递到 child 并打破其 profile-based 配置添加到它自己的本地故障安全插件和配置。 & 这非常有效!

这次没有跳过考试!

Running com.test.so51905256.PropITCase
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 s - in com.test.so51905256.PropITCase

p.s。不要忘记为 test 配置文件

添加某种 <activation>