Сценарий ant не расширяет значение свойства в аргументах exec - PullRequest
2 голосов
/ 12 мая 2011

У меня есть скрипт для муравья, как показано ниже:

<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

но когда я выполняю этот сценарий ant с помощью cruisecontrol, в моем файле журнала

[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 голосов
/ 12 мая 2011

Попробуйте разбить аргументы на 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=...>.

0 голосов
/ 12 мая 2011

Вы можете добавить в цель 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}"/>

Я думаю, это поможет вам определить, что файл не существует.

Я посмотрел на ваш другой вопрос об этом сценарии, который вы составляете. В коде, который записывает номер версии в файл, вы используете имя файла latestbuild.properties:

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

В вашем скрипте Ant вы загружаете другое имя файла lastestbuild.properties.

Если вы не исправили это с тех пор, это будет вашей проблемой. (Если бы вы изменили свой внешний скрипт, чтобы взять имя файла в качестве параметра, и определили имя файла один раз как свойство Ant - как в моем примере выше - это поможет вам избежать такого рода проблем.)

Что касается вашего открытия о том, что вам нужно дождаться внешнего скрипта, прежде чем продолжить работу в Ant, взгляните на задачу Sleep .

...