无法从配置文件配置附加系统属性
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
=)
所以midboy
与pariah
只有以下区别;
<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>
我有 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
=)
所以midboy
与pariah
只有以下区别;
<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>