首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Ant taskdef无法加载外部资源。/net

为什么Ant taskdef无法加载外部资源。/net
EN

Stack Overflow用户
提问于 2010-01-12 23:28:12
回答 3查看 39K关注 0票数 11

当使用taskdef声明外部ant任务时,例如ant-contrib,建议的设置是在taskdef中使用以下内容:

代码语言:javascript
复制
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>

当antcontrib.properties位于相对于build.xml文件的net/sf/antcontrib中时,这是有效的。

但是当我把它放在lib/net/sf/antcontrib中并将taskdef改为

代码语言:javascript
复制
<taskdef resource="lib/net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>

Ant无法找到属性文件,它会给出错误

代码语言:javascript
复制
[taskdef] Could not load definitions from resource
lib/net/sf/antcontrib/antcontrib.properties. It could not be found.

看起来ant单独处理lib目录,并且无法从那里加载taskdef资源。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-01 15:01:51

正如Alex所说,你不需要解开罐子的拉链。<taskdef>可以直接从jar中加载antcontrib.properties。

您得到的错误是因为您更改了资源路径,但是到压缩的jar/zip中的文件的路径仍然是相同的。任务不关注您移动的属性文件,因为您提供给<taskdef><classpath>告诉它只在jar中查找。

票数 5
EN

Stack Overflow用户

发布于 2010-01-13 08:26:19

使用antlib.xml资源:

下面是我使用的taskdef定义:

代码语言:javascript
复制
<property name="ant-contrib.jar" location="..."/>

<taskdef
  resource="net/sf/antcontrib/antlib.xml"
  uri="http://ant-contrib.sourceforge.net"
>
  <classpath>
    <pathelement location="${ant-contrib.jar}"/>
  </classpath>
</taskdef>

您不需要从jar文件中提取任何内容。此外,如果您不想将名称空间与antcontrib任务一起使用,则uri属性是可选的。

票数 4
EN

Stack Overflow用户

发布于 2010-02-09 16:07:21

为了处理任务定义的类路径,我在Ant中使用了类路径引用,这要容易得多。您可以链接包含类的目录,包含多个.jar的目录,或者(当然)单个.jar。

例如:

代码语言:javascript
复制
    <!-- Properties -->
    <property name="lib" value="lib/" />
    <property name="classes" value="bin/" />

    <!-- Classpath definition -->
    <path id="runtime-classpath" >
        <pathelement location="${bin}" />
        <fileset dir="${lib}">
            <include name="*.jar"/>
        </fileset>
    </path>

    <!-- Taskdefs definitions -->
    <taskdef name="myTask" classname="org.stackoverflow.tasks.MyTask" classpathref="runtime-classpath" />

    <!-- Tasks -->
    <target name="test" description="Test Action">
            <myTask parameter1="value" />
    </target>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2050043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档