2010-11-24 72 views
0

我正在开发一个使用<ant>任务调用另一个ant脚本的ant脚本。这个ant脚本是一个Java产品的安装程序,供我们的客户使用,他们将分别安装ant。有没有办法使用'-lib'选项来调用ant'ant'目标

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

但我不想在客户端自己安装的ant版本中拥有ant-antl3.jar文件的这种依赖性。

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

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

感谢

回答

1

我相信接受的方式做,这是手动设置在构建文件类路径,而不是通过全球的蚂蚁lib目录中隐含包括它。即

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

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

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

这样一来,全球蚂蚁设立不存在依赖关系,并且可以根据需要指定任何构建可能需要的任何文件(直至指定的调用或目标)。

显然,这些都是在您从客户端的构建文件调用的构建文件中执行的。这样,当你打电话给你的时候,classpath就会按照你的意愿设置。

另一种远不那么惯用的可能性是从字面上用Exec Task掏腰包并用这种方式称呼蚂蚁。显然,随着Ant任务的提供,蚂蚁的开发人员不建议你这样做。尽管如此,这是一个选择。

+0

的``元件由``元件支撑。我试过使用refids来传递类路径,也就是我在构建文件中设置路径,并将其作为refid传递给其他构建文件。但是,这并不是antlr任务def拾取的,我认为是因为用于taskdef的jar必须包含在ant lib中。 – Neil 2010-11-24 14:53:10

+0

exec任务方法适用于此,谢谢。 – Neil 2010-11-25 10:40:37

1

Tim的回答给出了大部分的故事,但为了运行Ant并设置JVM选项,您需要通过java任务调用它。

有的running this way在Ant文档一个例子,在这里略经修改以包括-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> 
相关问题