Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何模仿”-“lib foo.jar”;从u内的u build.xml_Java_Eclipse_Ant - Fatal编程技术网

Java “如何模仿”-“lib foo.jar”;从u内的u build.xml

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

通过将“-lib foo.jar”指定给ant,我获得了这样一种行为:foo.jar中的类被添加到ant类加载器中,并可用于使用类名参数的各种任务

我希望能够指定相同的行为,但只能从build.xml内部指定(因此我们可以在vanilla ant上这样做)

对于TaskDef,我们有如下功能代码:

<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 contrib
taskdef

提供了一个完美的例子,如果您决定使用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一起携带,从而得到一个相对路径。这只是一个加载的问题。