如何从 ant antfile 任务中获取属性

Posted

技术标签:

【中文标题】如何从 ant antfile 任务中获取属性【英文标题】:How to get properties from ant antfile task 【发布时间】:2021-07-30 22:34:23 【问题描述】:

使用<ant antfile="..."> 调用任务时,如何从<ant ...> 调用中获取属性?我问是因为一个 Maven 插件 -- maven-antrun-plugin -- 使用这种表示法并声明建议使用具有这种表示法的外部文件。

要查看 Maven 项目中的代码,请单击此处:Retrieve value from external ant file for use in Maven project,或查看上游错误报告 here。

这是蚂蚁代码:

<project default="run-test">

    <target name="run-test">
        <!-- Call using antfile notation -->
        <ant antfile="build.xml" target="antfile-task"/>
        <echo level="info">Outside antfile: my.val: $my.val</echo>
    </target>

    <target name="antfile-task">
        <property name="my.val" value="just some test value"/>
        <echo level="info">Inside antfile:  my.val: $my.val</echo>
    </target>

</project>

输出:

Buildfile: build.xml

run-test:

antfile-task:
     [echo] Inside antfile:  my.val: just some test value
     [echo] Outside antfile: my.val: $my.val

【问题讨论】:

【参考方案1】:

解决此限制的方法是使用以下命令读写属性文件,其中包含需要导出的属性:

<propertyfile file="my.properties">
   <entry key="my.val" value="$my.val"/>
</propertyfile>

...然后在使用中读回它:

<property file="my.properties"/>

这有一个额外步骤的缺点,但确实提供了一些属性封装,因此只有需要的属性才会暴露给父目标。

工作示例:

<project default="run-test">

    <target name="run-test">
        <!-- Call using antfile notation -->
        <ant antfile="build.xml" target="antfile-task"/>
        <!-- This will always be empty -->
        <echo level="info">Outside antfile:  my.val: $my.val</echo>

        <!-- Read the props file -->
        <property file="my.properties" description="read props from ant"/>
        <!-- Now we have the correct value -->
        <echo level="info">Props workaround: my.val: $my.val</echo>
    </target>

    <target name="antfile-task">
        <property name="my.val" value="just some test value"/>
        <echo level="info">Inside antfile:   my.val: $my.val</echo>

        <!-- Properties for export to maven -->
        <propertyfile file="my.properties">
            <entry key="my.val" value="$my.val"/>
        </propertyfile>
    </target>

</project>

【讨论】:

以上是关于如何从 ant antfile 任务中获取属性的主要内容,如果未能解决你的问题,请参考以下文章

Ant 脚本 - 如何从 plist 文件中打印一些文本并将其分配给属性

如何从ant中的txt文件导入变量值?

如何在 Ant 目标中使用文件大小

如何从 Ant Media Server 中获取所有的传入和传出流名称?

ANT 从属性文件中读取属性,使用 ANT 属性

如何从克隆表中获取数据属性?