2016-12-02 52 views
5

我想取消在pom.xml中定義的布爾屬性。如何否定pom.xml中的屬性?

含義,給定屬性${doSomething}我需要將<skip>傳遞給<skip>的值應該是${doSomething}的否定的插件。

如果${doSomething}爲假,那麼我想跳過。如果這是真的,那麼我不想跳過。有任何想法嗎?

澄清:我不是在說使用屬性的否定來激活配置文件。我只是想將一個布爾值的否定傳遞給一個插件。

+0

你能分享一下你正在使用的跳過涉及doSomething的當前命令嗎? – nullpointer

+0

@nullpointer這是一個自定義插件。請參閱https:// github上的'$ {download.cmake}'。COM/cmake的Maven的項目/ cmake的Maven的項目。如果用戶將此屬性設置爲false,我想跳過下載,但插件實際上將此值作爲輸入的否定(''參數)。 – Gili

+0

請將詳細信息添加到問題中,關於當前pom.xml的插件上下文以及當前正在執行的執行方法。我沒有在提供的鏈接中看到'$ {download.cmake}'。 – nullpointer

回答

6

除了輪廓激活,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。儘管所有這些都很難看......

+1

您能否更新答案以包含使用兩個配置文件將布爾值設置爲true或false的更完整示例? – Gili

+1

@Gili是的,我剛剛編輯。請注意,它只會在'doSomething'是一個系統屬性而不是任何Maven屬性時起作用。 – Tunaki

+0

沒關係(但是請指出!) – Gili

1

我不知道確切的答案,但我認爲你可以嘗試以下操作來反轉屬性值(來自http://maven.apache.org/guides/introduction/introduction-to-profiles.html)。

<property> 
    <name>dontDoSomething</name> 
    <value>!${doSomething}</value> 
</property> 
+0

這不起作用,因爲我們不是在這裏討論配置文件激活。我們正在討論定義一個傳入插件的屬性。 – Gili

+0

這不是關於什麼,而是如何。你如何反轉一個屬性的價值。 – actc

+0

啊。對不起,我現在會嘗試。 – Gili

相關問題