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

标签 javascript apache ant properties

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

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

任务/编译.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>

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

我也尝试在“编译”-project xml 中设置一个,但无论如何它都不会被目标覆盖。

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

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

谢谢!

最佳答案

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

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

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

编辑:还有AntCallBack可从 Ant-Contrib 获得的任务和 Antelope :

AntCallBack is identical to the standard 'antcall' task, except that it allows properties set in the called target to be available in the calling target.

关于javascript - 无法访问导入的 ANT 目标中的脚本生成的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1721574/

相关文章:

linux - Ubuntu Desktop 20.04 - 没有 VirtualHost 配置的 Apache2 呈现网站

java - 最佳 Apache Ant 模板

javascript - Electron:将 'fullscreen' 标志设置为 false 不会禁用 macOS 上的全屏按钮

javascript - 在 Firebase 中,如何使用单独的 ORDER BY 执行 WHERE 查询

javascript - this.nextChild 未定义 - mouseover/mouseout

javascript - 添加时间的行值

apache - 从 Gitlab 重定向后,HTTPS 方案在 Apache 代理场景中丢失

php - Apache错误日志: Log only for part of server

java - 使用 Microsoft Team Foundation 提取增量

ant - 当 ant 的 jar 任务包含在 jar 中时,如何重命名文件?