2009-06-29 58 views
0

我想使用相同的ant腳本在本地Windows環境或我們的redhat構建服務器上進行構建。Ant:引用動態屬性

我在兩個文件(build_unix.properties & build_windows)中有一個變量'buildDirectory'。我想根據環境設置變量。

<osfamily property="os.family"/> 
<property file="./build_${os.family}.properties" /> 
<property name="tmp-base.folder" value="${buildDirectory}/tmp/"/> 

我也試過

<if> 
    <os family="unix"/> 
    <then> 
     <property file="./build_unix.properties" /> 
    </then> 
    <else> 
     <property file="./build_windows.properties" /> 
    </else> 
</if> 

任何想法?

+0

問題似乎是語句的位置。當他們嘗試訪問時,來自這裏的屬性可能還沒有解決。 – 2009-08-13 08:55:28

回答

0

我希望你的if ... then ... else版本能夠工作。因爲它顯然不是我會添加一些額外的回聲,以確保您的構建正在做你認爲正在做的事情。

  1. then和else中的echo會讓你確切地知道正在執行的路徑。
  2. 爲屬性添加前綴(例如< property file =「...」prefix =「test」/>),然後添加一個< echoproperties prefix =「test」/>以確保您認爲正在加載的屬性是。
1

你問你如何自動設置os.family屬性?

如果是的話,這裏有一個方法:

<available file="C:\\" property="os.family" value="windows" /> 
    <available file="/usr/bin/" property="os.family" value="unix" /> 

啊!編輯的問題使得它更清楚你問的是什麼(而不是這個),並且我看到你正在使用ant-contrib的「osfamily」任務來確定OS系列。但是,我將這個答案留給任何只使用ant而沒有ant-contrib的人。

0

你可以有兩個文件:build-unix.propertiesbuild-windows.properites並在init目標,你只需做一個副本:

<copy file="build-${os.family}.properties" tofile="build.properties"> 

你的主要build.xml可以簡單地引用build.properties文件。

這可能是相當棘手,使其正常工作,所以我會做的是保持構建服務器的所有屬性在build.properties文件,並允許本地覆蓋(對於Windows窗口)在build-local.properties。您還可以將屬性移動到build-common.properties,以便您的構建文件將按以下順序包含屬性文件

<property file="build-local.properties"/> 
<property file="build-common.properties"/> 
<property file="build.properties"/>