我想取消在pom.xml中定義的布爾屬性。如何否定pom.xml中的屬性?
含義,給定屬性${doSomething}
我需要將<skip>
傳遞給<skip>
的值應該是${doSomething}
的否定的插件。
如果${doSomething}
爲假,那麼我想跳過。如果這是真的,那麼我不想跳過。有任何想法嗎?
澄清:我不是在說使用屬性的否定來激活配置文件。我只是想將一個布爾值的否定傳遞給一個插件。
我想取消在pom.xml中定義的布爾屬性。如何否定pom.xml中的屬性?
含義,給定屬性${doSomething}
我需要將<skip>
傳遞給<skip>
的值應該是${doSomething}
的否定的插件。
如果${doSomething}
爲假,那麼我想跳過。如果這是真的,那麼我不想跳過。有任何想法嗎?
澄清:我不是在說使用屬性的否定來激活配置文件。我只是想將一個布爾值的否定傳遞給一個插件。
除了輪廓激活,Maven的沒有一個布爾邏輯實現的:在您反轉第一屬性的值聲明另一個屬性。因此,如果要取消將某個媒體資源傳遞給插件的功能,則需要自行完成。這是一個有點笨拙,但你可以使用build-helper-maven-plugin:bsh-property
目標,這使得寫在它定義爲Maven的特性BeanShell script和出口變量:
<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}
。
如果doSomething
不存在,可以將其增強爲具有默認值dontDoSomething
。
<source>
value = project.getProperties().getProperty("doSomething");
dontDoSomething = value == null ? false : !Boolean.parseBoolean(value);
</source>
BeanShell的是一種腳本語言,看起來非常像Java和您可以使用現有的Java方法。在上面,屬性"doSomething"
從項目的屬性中檢索(project
由插件在當前Maven項目的評估時注入);它沒有定義,我們返回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
是一個Maven屬性在<properties>
標籤例如設置這將無法正常工作。它將需要作爲系統屬性通過mvn -DdoSomething=true|false
。相應的配置文件將根據系統屬性的值激活,這會將dontDoSomething
屬性定義爲其反轉。如果該屬性未定義,則pro-1
將處於活動狀態,並將dontDoSomething
設置爲默認值false
。儘管所有這些都很難看......
我不知道確切的答案,但我認爲你可以嘗試以下操作來反轉屬性值(來自http://maven.apache.org/guides/introduction/introduction-to-profiles.html)。
<property>
<name>dontDoSomething</name>
<value>!${doSomething}</value>
</property>
你能分享一下你正在使用的跳過涉及doSomething的當前命令嗎? – nullpointer
@nullpointer這是一個自定義插件。請參閱https:// github上的'$ {download.cmake}'。COM/cmake的Maven的項目/ cmake的Maven的項目。如果用戶將此屬性設置爲false,我想跳過下載,但插件實際上將此值作爲輸入的否定(''參數)。 –
Gili
請將詳細信息添加到問題中,關於當前pom.xml的插件上下文以及當前正在執行的執行方法。我沒有在提供的鏈接中看到'$ {download.cmake}'。 – nullpointer