我正在开发一个使用<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的其他路径?
我已经看了一下在线文档,似乎没有办法。
由于
答案 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)
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>