java - macrodef 上的 Ant 'unless'

标签 java ant build dependencies macrodef

我想写一个 macrodef,它依赖于另一个 macrodef 中设置的属性,例如这个,它不起作用......(macrodef 不支持 depends 和 unless 属性)无论如何要这样做?

<project name="mac">

    <property name="antlr.version" value="3.2"/>

    <macrodef name="check">
        <attribute name="dest"/>
        <attribute name="name"/>
        <attribute name="version"/>
        <sequential>
            <available file="@{dest}/@{name}-@{version}.jar" property="@{name}-exists"/>
        </sequential>
    </macrodef>

    <macrodef name="pull" depends="check" unless="@{name}-exists">
        <attribute name="url"/>
        <attribute name="dest"/>
        <attribute name="name"/>
        <attribute name="version"/>

        <sequential>
            <get src="@{url}" dest="@{dest}/@{name}-@{version}" verbose="true" ignoreerrors="true" unless="@{name}-exists"/>
        </sequential>
    </macrodef>

    <target name="pullall">
           <pull url="http://repo1.maven.org/maven2/org/antlr/antlr/${antlr.version}/antlr-${antlr.version}.jar" dest="." name="antlr" version="${antlr.version}"/>
    </target>

最佳答案

这似乎可行:

    <project name="mac">

        <property name="antlr.version" value="3.2"/>
        <property name="stringtemplate.version" value="4.0.2"/>

        <target name="check">
            <available file="${dest}/${name}-${version}.jar" property="jar-exists"/>
        </target>

        <target name="_pull" depends="check" unless="jar-exists">
            <get src="${url}" dest="${dest}/${name}-${version}.jar" verbose="true" ignoreerrors="true"/>
        </target>

        <macrodef name="pull">
            <attribute name="url"/>
            <attribute name="dest"/>
            <attribute name="name"/>
            <attribute name="version"/>

            <sequential>
                <antcall target="_pull">
                    <param name="url" value="@{url}"/>
                    <param name="dest" value="@{dest}"/>
                    <param name="name" value="@{name}"/>
                    <param name="version" value="@{version}"/>
                </antcall>
            </sequential>
        </macrodef>

        <target name="pullall">
        <pull url="http://repo1.maven.org/maven2/org/antlr/antlr/${antlr.version}/antlr-${antlr.version}.jar" dest="." name="antlr" version="${antlr.version}"/>
        <pull url="http://repo1.maven.org/maven2/org/antlr/stringtemplate/${stringtemplate.version}/stringtemplate-${stringtemplate.version}.jar" dest="." name="stringtemplate" version="${stringtemplate.version}"/>
        </target>

</project>

关于java - macrodef 上的 Ant 'unless',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079565/

相关文章:

java - 如何将 cursorLoader 转换为 Loader<Object>

ant - 将 PaxExam 与 Bndtools 结合使用

eclipse - Run as Ant build' 在我的 eclipse 中丢失

ant - 如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?

Android gradle 构建和支持库

java - 如何在teradata中执行多个查询?

java - 将变量从 Scriptlet 传递到 javascript 代码。

java - Checkstyle 结果集中的魔数(Magic Number)

ios - 在 iOS 开发的上下文中,什么是配置/makefile 脚本的好书或引用?

javascript - AngularJS-咕噜声 : Does a solution exist to build a running application with only desired modules