Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t访问由导入的ANT目标中的脚本生成的属性_Javascript_Apache_Ant_Properties - Fatal编程技术网

Javascript Can';t访问由导入的ANT目标中的脚本生成的属性

Javascript Can';t访问由导入的ANT目标中的脚本生成的属性,javascript,apache,ant,properties,Javascript,Apache,Ant,Properties,我要做的是编译成一个文件,它从源文件中的一个常量获取它的版本 我有这样的设置(或至少是有效位): tasks/compile.xml <project name="Compile"> <target name="check.version"> <script language="javascript"> regex = /VERSION.+?"([\d\.]+)";/; r = new j

我要做的是编译成一个文件,它从源文件中的一个常量获取它的版本

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

tasks/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>

regex=/VERSION.+?“([\d\.]+)”;/;
r=newjava.io.BufferedReader(new java.io.FileReader(new java.io.File(File));
line=r.readLine();
而((line=r.readLine())!=null){
m=regex.exec(行);
如果(m){
project.setProperty(“project.version”,m[1]);
打破
}
}
r、 close();
${ant.project.name}-${project.version}
和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>

${project.version}
因此,脚本设置的属性似乎仅在该目标中本地定义,如果我在同一项目(“Compile”)中指定另一个目标,它也不会知道该属性

我还尝试在“Compile”项目xml中设置一个,但它无论如何不会被目标覆盖

那么如何访问脚本生成的属性呢?或者有没有其他方法来做这样的事情

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


谢谢

如果通过
antcall
调用另一个目标,则在该目标中设置的属性将不在调用方的范围内

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

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

${project.version}

编辑:还有一项任务可从和获得:

AntCallBack与 标准的“antcall”任务,除了 它允许在被调用的 要在调用中可用的目标 目标


另外,你知道有什么IRC频道(有人在里面)可以问蚂蚁相关的问题吗?太好了!但由于我无法将参数传递到依赖项(或者我可以吗?),所以我只需查找一个属性即可。谢谢编辑答案,添加Ant Contrib提供的
antcallback
任务。