2016-09-16 112 views
1

我有一個maven屬性問題,我無法在文檔中找到引用。 從命令行我將輸入屬性「from.command」。此屬性將始終存在。根據其他屬性的存在設置maven屬性

mvn deploy -Dfrom.command=COMMANDVALUE 

裏面的pom.xml我會指定其他屬性:

<properties> 
    <from.pom>POMVALUE</from.pom> 
    </properties> 

此屬性將一些時間在那裏,其他時間會丟失。

我想有一個名爲used.value

第三屬性我想used.value被設置爲「from.pom」的值,如果該屬性存在,否則應設置的值「from.command」

這需要驚訝,因爲我需要從另一個腳本運行maven構建,我不希望腳本必須檢查所有的pom文件。

這可能嗎?

回答

2

您可以使用build-helper-maven-plugin:bsh-property mojo。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
    <execution> 
     <id>bsh-property</id> 
     <goals> 
     <goal>bsh-property</goal> 
     </goals> 
     <configuration> 
     <properties> 
      <property>used.value</property> 
     </properties> 
     <source> 
      used.value = project.getProperties().getProperty("from.pom", session.getUserProperties().getProperty("from.command")); 
     </source> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

這個目標可以編寫BeanShell腳本。它會自動將變量project定義爲實際的Maven項目,將session定義爲正在執行的Maven會話。

上面的腳本從Maven項目的屬性獲取屬性"from.pom",並且默認爲在命令行中設置的"from.command"屬性。它將它設置爲used.value變量,然後在執行腳本之後,插件將其作爲Maven屬性導出。命令行屬性從Maven會話中檢索到getUserProperties()

用戶屬性可由用戶直接自行決定,例如,通過命令行上的-Dkey=value參數。

這個目標自動綁定到validate階段,這是在默認的生命週期運行的第一階段,那麼你就可以使用${used.value}作爲構建其餘裏面的屬性。

+0

這看起來像一個很好的答案,但我的解決方案必須與Windows和Linux一起工作 – Robert3452

+0

@ Robert3452這是獨立的系統,無論在Linux還是Windows上都是如此。 – Tunaki

+0

好爽。我會在我的項目上設置它並檢查出 – Robert3452