有没有办法用'-lib'选项调用ant'ant'目标

时间:2010-11-24 13:52:49

标签: ant antlr

我正在开发一个使用<ant>任务调用另一个ant脚本的ant脚本。这个ant脚本是Java产品的安装程序,供我们的客户使用,他们将单独安装ant。

被调用的脚本使用antlr任务<antlr:ant-antlr3>。为此,我必须将ant-antlr3.jar文件放在ant lib目录中,并将antlr-3.2.jar添加到类路径中。

但是我不希望在客户端自己安装的ant版本中有ant-antl3.jar文件的依赖。

有没有办法提供等效于ant的命令行'-lib'选项来指定使用<ant>任务本身添加到antlib的jar的其他路径?

我已经看了一下在线文档,似乎没有办法。

由于

2 个答案:

答案 0 :(得分:1)

我认为可以接受的方法是在构建文件中手动设置类路径,而不是通过全局ant lib目录隐式包含它。即。

<path id="master-classpath">
    <fileset dir="${lib}" />
    <fileset file="${findbugs-base}/lib/annotations.jar" />
    <pathelement location="${build-classes}" />
</path>

然后,您可以在任何可以接受类路径args的任务中使用此路径元素,例如javac

<javac
        destdir="${out}"
        source="1.5"
        target="1.5"
        debug="true">
    <src path="${src}" />
    <classpath refid="master-classpath" />
</javac>

这样,全局ant设置不是依赖项,您可以根据需要指定任何构建所需的任何文件(直到给定的调用或目标)。

显然,这都是在您从客户端构建文件调用的构建文件中执行的。这样,当你呼唤你的时,类路径将完全按照你的意愿设置。

另一个不那么惯用的可能性就是用Exec Task逐字地说出来并用这种方式调用ant。显然,随着Ant任务的提供,ant的开发人员不建议你这样做。尽管如此,这是一个选择。

答案 1 :(得分:1)

Tim的答案提供了大部分内容,但为了运行Ant并设置JVM选项,您需要通过java任务调用它。

Ant文档中有running this way的示例,此处稍作修改以包含-lib

<java
        classname="org.apache.tools.ant.launch.Launcher"
        fork="true"
        failonerror="true"
        dir="${sub.builddir}"
        timeout="4000000"
        taskname="startAnt"
>
    <classpath>
        <pathelement location="${ant.home}/lib/ant-launcher.jar"/>
    </classpath>
    <arg value="-lib"/>
    <arg value="${path.to.your.antlr.jar}"/>
    <arg value="-buildfile"/>
    <arg file="${sub.buildfile}"/>
    <arg value="${sub.target}"/>
</java>