gpt4 book ai didi

maven - 如何否定 pom.xml 中的属性?

转载 作者:行者123 更新时间:2023-12-03 23:42:41 26 4
gpt4 key购买 nike

我想否定 pom.xml 中定义的 bool 属性。

含义,给定一个属性 ${doSomething}我需要通过<skip>到一个插件,其中 <skip> 的值应该是 ${doSomething} 的否定.

如果 ${doSomething}是假的,那我想跳过。如果是真的,那我不想跳过。有任何想法吗?

澄清 :我不是在谈论使用属性的否定来激活配置文件。我只想将 bool 值的否定传递给插件。

最佳答案

除了配置文件激活之外,Maven 没有实现 bool 逻辑。因此,如果想要否定属性以将其传递给插件,您需要自己做。它有点笨拙,但您可以使用 build-helper-maven-plugin:bsh-property 目标,它可以写一个 BeanShell script并将其中定义的变量导出为 Maven 属性:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>negate-prop</id>
<phase>initialize</phase>
<goals>
<goal>bsh-property</goal>
</goals>
<configuration>
<source>dontDoSomething = !${doSomething};</source>
<properties>
<property>dontDoSomething</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>

您不能覆盖该属性,但您可以定义一个包含否定结果的新属性;在上面的例子中,它是 dontDoSomething .这是在 initialize 中运行的。阶段,以便其余插件可以将其用作参数,使用标准 ${dontDoSomething} .

这可以增强为具有 dontDoSomething 的默认值。如果 doSomething不存在。
<source>
value = project.getProperties().getProperty("doSomething");
dontDoSomething = value == null ? false : !Boolean.parseBoolean(value);
</source>

BeanShell 是一种脚本语言,看起来非常像 Java,您可以使用现有的 Java 方法。在上面,属性 "doSomething"从项目的属性中检索( project 由插件在评估时与当前 Maven 项目一起注入(inject));如果它没有定义,我们返回 false ,否则,我们否定该值。

如果 doSomething特别是系统属性,也可以 (ab) 使用配置文件激活功能并拥有 2 个配置文件:一个由 true 的属性激活并将另一个设置为 false ,以及第二个配置文件执行相反的操作:
<profiles>
<profile>
<id>pro-1</id>
<activation>
<property>
<name>doSomething</name>
<value>!false</value>
</property>
</activation>
<properties>
<dontDoSomething>false</dontDoSomething>
</properties>
</profile>
<profile>
<id>pro-2</id>
<activation>
<property>
<name>doSomething</name>
<value>false</value>
</property>
</activation>
<properties>
<dontDoSomething>true</dontDoSomething>
</properties>
</profile>
</profiles>

如果 doSomething,这将不起作用是在 <properties> 中设置的 Maven 属性以标签为例。它需要作为系统属性与 mvn -DdoSomething=true|false 一起传递。 .将根据系统属性的值激活相应的配置文件,该属性将定义 dontDoSomething属性为其倒数。如果未定义属性, pro-1将处于事件状态,设置 dontDoSomething默认值 false .虽然这一切都很丑陋...

关于maven - 如何否定 pom.xml 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com