Не удается получить доступ к свойству, созданному сценарием в импортированной цели ANT - PullRequest
2 голосов
/ 12 ноября 2009

Я пытаюсь скомпилировать файл, который берет его версию из константы внутри моих исходных файлов.

У меня есть такая настройка (или хотя бы значащие биты):

задачи / compile.xml

<project name="Compile">
    <target name="check.version">
        <script language="javascript">
            regex = /VERSION.+?"([\d\.]+)";/;
            r = new java.io.BufferedReader(new java.io.FileReader(new java.io.File(file)));
            line = r.readLine();
            while ( (line = r.readLine()) != null) {
                m = regex.exec(line);
                if (m) {
                    project.setProperty( "project.version" , m[1] );
                    break;
                }
            }
            r.close();
        </script>
        <echo>${ant.project.name}-${project.version}</echo> <!-- = Fail-0.2 -->
    </target>
</project>

И build.xml:

<project name="Fail"> 
    <import file="${basedir}/build/tasks/compile.xml"/>

    <target name="test">
        <antcall target="check.version">
            <param name="file" value="${basedir}/Source.as"/>
        </antcall>
        <echo>${project.version}</echo> <!-- = ${project.version} -->
        <echoproperties></echoproperties>
    </target>
</project>

Итак, похоже, что свойство, установленное сценарием, определено только локально в этой цели, если я укажу другую цель в том же проекте («Компиляция»), оно также не узнает об этом свойстве.

Я также пытался установить в xml-проекте "Compile", но цель все равно не будет перезаписана.

Так как я могу получить доступ к этому свойству, сгенерированному сценарием? Или есть другой способ сделать что-то подобное?

Мне бы очень хотелось сохранить эту часть в отдельном xml, так как это делает скрипт сборки проекта намного чище.

Спасибо!

1 Ответ

2 голосов
/ 12 ноября 2009

Если вы вызываете другую цель через antcall, свойства, установленные в ней, не будут находиться в области действия вызывающей стороны.

Если вам нужен доступ к свойствам, установленным другой целью, вы можете объявить эту цель как зависимость, чтобы убедиться, что она выполняется перед вашей целью. Как это:

<target name="test" depends="check.version">
    <echo>${project.version}</echo> <!-- = value set in check.version -->
    <echoproperties></echoproperties>
</target>

Редактировать: Существует также задача AntCallBack , доступная из Ant-Contrib и Антилопа :

AntCallBack идентичен стандартная задача 'antcall', за исключением того, что это позволяет свойства, установленные в вызываемом цель быть доступной в вызове цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...