我正在尝试编译的是一个文件,它从我的源文件中的常量中获取它的版本。
我有这样的设置(或至少有效位):
任务/ 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中,因为它使项目构建脚本更加清晰。
谢谢!
答案 0 :(得分:2)
如果您通过antcall
调用其他目标,则其中设置的属性将不在调用者的范围内。
如果您需要访问由另一个目标设置的属性,您可以将该目标声明为依赖项,以确保它在目标之前执行。像这样:
<target name="test" depends="check.version">
<echo>${project.version}</echo> <!-- = value set in check.version -->
<echoproperties></echoproperties>
</target>
修改:AntCallBack和Ant-Contrib还提供Antelope任务:
AntCallBack与。相同 标准的'antcall'任务,除了 它允许在被调用中设置属性 目标在通话中可用 目标