2012-11-25 57 views
11

是否有可能以有條件的方式在Ant 屬性文件(而不是build.xml)中設置屬性值?例如,如果apache.root屬性已設置 - 否則my_property將爲${apache.root}/myapp/var/www/myapp。如果沒有,那麼常見的做法是什麼 - 可重複使用的文件是build.xml螞蟻屬性文件中的條件屬性

回答

24

使用condition任務:

<project name="demo" default="run"> 

    <condition property="my_property" value="${apache.root}/myapp" else="/var/www/myapp"> 
     <isset property="apache.root"/> 
    </condition> 

    <target name="run"> 
     <echo message="my_property=${my_property}"/> 
    </target> 

</project> 
+0

謝謝。但是,我問的是'property'文件,而不是'build.xml'。或者,如果我對你有所瞭解,「條件」任務是實現目標的唯一方法嗎? – BreakPhreak

+0

你可以閱讀build xml中的屬性文件,並且以後可以根據相關屬性定義新屬性... – Vishal

+0

我希望有一些可以重複使用的屬性文件(有條件)可以被幾個'build.xml '文件。我瞄準了錯誤的方向嗎? – BreakPhreak

1

可以包括基於環境或條件變量不同的屬性文件。例如

對於
<echo>Building ${ant.project.name} on OS: ${os.name}-${os.arch}</echo> 
<property file="build-${os.name}.properties" /> 

這將包括一個名爲「建窗口7.properties」或取決於那裏,並正在運行「build-Linux.properties」文件。當然,property指令在當前目錄以及主目錄中查找。所以屬性文件可以是構建源的一部分,也可以是構建帳戶的主目錄。

您可以使用條件標籤生成屬性文件的名稱的一部分,以及選擇

1

其中一個條件,你可以用最簡單的形式是:

<exec executable="hostname" outputproperty="hostname"/> 
<condition property="python" value="/usr/bin/python3.4"> 
    <equals arg1="${hostname}" arg2="host0"/> 
</condition> 
<property name="python" value="/usr/bin/python"/> 

,以適應不同例如python安裝路徑。在這裏,默認的安裝路徑是/ usr/bin/python,除了host0之外它/usr/bin/python3.4

0

OP詢問屬性文件,而不是在ant編譯文件中。不幸的是,條件不能從屬性文件中完成。你可以做的是爲每組相關屬性分別設置屬性文件。例如:

在build.xml

<condition property="app.name" value="appA"> 
    <equals arg1="${appName}" arg2="A" /> 
</condition> 
<condition property="app.name" value="appB"> 
    <equals arg1="${appName}" arg2="B" /> 
</condition> 
<property file="${app.name}.properties" /> 
<!-- since properties are immutable, set your defaults here --> 
<property name="apache.root" value="/var" /> 
<property file="restOfProps.properties" /> 

appA.properties

apache.root=/appA 

restOfProps.properties

my_property=${apache.root}/myapp