如何根据另一个配置文件中设置的属性来激活一个通用配置文件?
我有一个包含多个Maven配置文件的项目,其中声明了一个属性,用来控制用Arquillian编写的集成测试。
pom结构类似如下。
<properties>
<skip.integration.tests>true</skip.integration.tests>
</properities>
<profiles>
<profile>
<id>arq-common-deps</id>
<property>
<name>skip.integration.tests</name>
<value>false</value>
</property>
</profile>
<profile>
<id>arq-glassfish-managed</id>
<properties>
<skip.integration.tests>false</skip.integration.tests>
</properities>
</profile>
</profiles>
当使用带有 -Parq-glassfish-managed 的profile参数来运行集成测试时,它会把属性 skip.integration.tests 设置为false,以便让failsafe插件加载集成测试代码。
看来这并不起作用。
解决方案
简短的回答是:你不能。
如果你查看 构建配置文件文档,你可以读到更长的答案(以下为我强调的部分):
profile将在Maven检测到相应name=value对的一对中的一个 系统属性 或 CLI用户属性(一个可以通过POM中的${name}解引用的值),并且它与给定的值(若有)相匹配时被激活。自Maven 3.9.0起,还可以通过属性名packaging来评估pom的<packaging value>。
简单来说,Maven的一个Profile 不能通过POM自身设置的属性来激活。系统属性可以使用,正如在 settings.xml 中定义的属性也可以使用,但那在这里无济于事。POM中的一个属性本身无法激活一个profile……并且由于profiles不能直接设置系统属性或激活其他profiles,这意味着profiles不能激活其他profiles。
这里的解决方案很大程度上取决于你打算做什么。你可以在某些模块中使用显式的 activeProfiles 块,你可以使用文件(如 .mvn/active-profiles/integeration-tests),你也可以在CLI上声明该属性。但你不能用这种方式“链式”激活配置文件,Maven绝对不会允许。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。