ant脚本不在exec参数中扩展属性值

时间:2011-05-12 06:37:02

标签: ant cruisecontrol snapshotcm

我有一个蚂蚁脚本,如下所示:

<project name="nightly_build" default="main" basedir="checkout">
    <target name="init">
        <exec executable="C:/Work/Searchversion.exe"/>
        <property file="initial.properties"/>
        <property file="C:/Work/lastestbuild.properties"/>
        <tstamp>
            <format property="suffix" pattern="yyyyMMddHHmmss"/>
        </tstamp>
    </target>
    <target name="main" depends="init">
        <exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe">
            <arg line='-h sinsscm01.sin.ds.net -S"/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}" /'/>
        </exec>
    </target>
</project>

我创建了上面的脚本来复制命令:wco -h sinsscm01.sin.ds.net -S"/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_6.70.102.014" /

6.70.102.014位于latestbuild.properties文件中,格式为:

Version_Number = 6.70.102.014

当我执行latestbuild.properties

时获取此C:/Work/Searchversion.exe文件

但是当我使用cruisecontrol在我的日志文件中执行这个ant脚本时,

[Thread-24] INFO ScriptRunner - [exec] Cannot open snapshot 'sinsscm01.sin.ds.jdsu.net:/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}': No such snapshot

其中${Version_Number}应该是6.70.102.014

我如何解决这个问题?

编辑1:

经过反复试验并用内置属性$ {ant.version}代替,我意识到我的属性文件可以在这里正确加载。任何人都可以指出我的错误?我没有看到任何错误

编辑2:

只是附加信息......这实际上是cruisecontrol的委托蚂蚁脚本(用于执行夜间构建)。这是我每分钟构建的config.xml文件:

<cruisecontrol>
    <project name="dms" buildafterfailed="true">
        <listeners>
            <currentbuildstatuslistener file = "logs/dms/status.txt"/>
        </listeners>
        <bootstrappers>
        </bootstrappers>
        <modificationset quietperiod="60">
            <alwaysbuild/>
        </modificationset>
        <schedule interval="60">
            <ant buildfile="nightly_build.xml" target="main"/>
        </schedule>
        <log dir="logs/dms">
            <merge dir="checkout/dms/build/test-results" />
        </log>
        <publishers>
        </publishers>
    </project>
</cruisecontrol>

应该在config.xml中加载属性文件吗?

2 个答案:

答案 0 :(得分:0)

您可以在init目标中添加断言,即所需的属性文件存在并且定义了属性。例如:

<property name="version.file" value="C:/Work/lastestbuild.properties"/>
<available file="${version.file}" property="version.file.available"/>
<fail unless="version.file.available" message="file [${version.file}] is not available"/>
<property file="${version.file}"/>
<fail unless="version" message="property [version] is not defined"/>
<echo message="version: ${version}"/>

我认为这会帮助您发现该文件不存在。

我看了一下你关于这个脚本的other question。在将版本号写入文件的代码中,使用文件名latestbuild.properties

 TextWriter latest = new StreamWriter("C:\\Work\\latestbuild.properties");

在Ant脚本中,您要加载不同的文件名lastestbuild.properties

除非你从那时起修复它,否则这将是你的问题。 (如果您修改了外部脚本以将文件名作为参数,并将文件名定义为Ant属性 - 如上面的示例所示 - 它将帮助您避免此类问题。)

关于您在继续使用Ant之前需要等待外部脚本的发现,请查看Sleep任务。

答案 1 :(得分:0)

尝试将wco.exe的参数分解为单独的子元素,如下所示:

<exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe">
    <arg value="-h" />
    <arg value="sinsscm01.sin.ds.net" />
    <arg value="-S" />
    <arg value="/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}" />
    <arg value="/" />
</exec>

我认为ant不会扩展${Version_Number},因为它位于您发布的版本中的“...”中。

<exec> <arg line=...>所述,您应该避免使用{{1}}表单。