无法访问导入的ANT目标中的脚本生成的属性

时间:2009-11-12 11:28:36

标签: javascript apache ant properties

我正在尝试编译的是一个文件,它从我的源文件中的常量中获取它的版本。

我有这样的设置(或至少有效位):

任务/ 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中设置一个但是它不会被目标覆盖。

那么如何访问脚本生成的属性呢?或者还有另一种方法可以做这样的事情吗?

我真的希望将该部分保存在单独的xml中,因为它使项目构建脚本更加清晰。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您通过antcall调用其他目标,则其中设置的属性将不在调用者的范围内。

如果您需要访问由另一个目标设置的属性,您可以将该目标声明为依赖项,以确保它在目标之前执行。像这样:

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

修改AntCallBackAnt-Contrib还提供Antelope任务:

  

AntCallBack与。相同   标准的'antcall'任务,除了   它允许在被调用中设置属性   目标在通话中可用   目标