Java “如何模仿”-“lib foo.jar”;从u内的u build.xml
通过将“-lib foo.jar”指定给ant,我获得了这样一种行为:foo.jar中的类被添加到ant类加载器中,并可用于使用类名参数的各种任务 我希望能够指定相同的行为,但只能从build.xml内部指定(因此我们可以在vanilla ant上这样做) 对于TaskDef,我们有如下功能代码:Java “如何模仿”-“lib foo.jar”;从u内的u build.xml,java,eclipse,ant,Java,Eclipse,Ant,通过将“-lib foo.jar”指定给ant,我获得了这样一种行为:foo.jar中的类被添加到ant类加载器中,并可用于使用类名参数的各种任务 我希望能够指定相同的行为,但只能从build.xml内部指定(因此我们可以在vanilla ant上这样做) 对于TaskDef,我们有如下功能代码: <taskdef resource="net/sf/antcontrib/antlib.xml" description="for/foreach tasks"> <clas
<taskdef resource="net/sf/antcontrib/antlib.xml" description="for/foreach tasks">
<classpath>
<pathelement location="${active.workspace}/ant-contrib-1.X/lib/ant-contrib.jar" />
</classpath>
</taskdef>
其中定义完全由列出的ant-contrib.jar提供
“全局”蚂蚁类路径的等效机制是什么
(我认为这是让
在JRE上使用ecj-3.5.jar进行编译的一种方法——与ant 1.7兼容。欢迎提供更好的建议:)
编辑:即将发布的ant4eclipse 1.0版似乎包括ecj。这并不能回答问题,但可能会解决我的基本问题。我已经发布了您链接的问题的答案。我在这里重复一个一般的解决方案 在阅读本文时,我认为您可以编写一个简单的包装器来正确设置类路径,并将任何第三方库添加到生成的类路径中 在这里,我只是剪切和粘贴上面链接中的示例,并将库添加到类路径中:
<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"/>
<pathelement location="/path/to/3rd-party-lib.jar"/>
</classpath>
<arg value="-buildfile"/>
<arg file="${sub.buildfile}"/>
<arg value="-Dthis=this"/>
<arg value="-Dthat=that"/>
<arg value="-Dbasedir=${sub.builddir}"/>
<arg value="-Dthe.other=the.other"/>
<arg value="${sub.target}"/>
</java>
我认为您甚至可以通过引用${ant.file}
重用相同的构建文件,只需将不同的目标作为入口点即可
编辑
我认为,这一解决办法只能作为最后手段。如果任务通常支持
标记,则将所需的库本地添加到该特定任务中。在您的问题中,您的ant contribtaskdef
提供了一个完美的例子,如果您决定使用ant 1.8,您可以使用以下结构:
<import>
<javaresource name="resource_name.xml">
<classpath location="path_to_jar.jar" />
</javaresource>
</import>
那么您的建议基本上是用“-lib foo.jar”参数重新启动ant?我同意这应该是最后的手段——我希望“只需将此添加到当前的类路径”method@Thorbjørn。如果您所依赖的任务在当前类路径上找不到所需的库,并且没有提供扩展来仅为当前任务指定它,那么此方法与任何方法一样好。我通读了链接的文档,其中没有提到您要求的扩展功能。也许这是对Ant1.9的要求。我确实认为构建文件应该是自包含的,而不依赖于全局lib
或用户lib
目录。我将把jar文件与build.xml一起携带,从而得到一个相对路径。这只是一个加载的问题。