2009-06-29 56 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"/>