Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
为什么Ant taskdef无法在外部加载资源。/net_Ant_Taskdef - Fatal编程技术网

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

为什么Ant taskdef无法在外部加载资源。/net,ant,taskdef,Ant,Taskdef,使用taskdef(例如ant contrib)声明外部ant任务时,建议使用taskdef中的以下设置: <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/> </classpath> </taskdef&g

使用taskdef(例如ant contrib)声明外部ant任务时,建议使用taskdef中的以下设置:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>

ant似乎单独处理lib目录,无法从那里加载taskdef资源。

使用
antlib.xml
resource:

以下是我使用的taskdef定义:

<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文件中提取任何内容。另外,
uri
属性是可选的,如果您不想在antcontrib任务中使用名称空间。

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

例如:

    <!-- 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>

正如Alex所说,您不需要解压缩jar。
可以直接从jar中加载antcontrib.properties

您得到的错误是因为您更改了资源路径,但压缩jar/zip中的文件路径仍然相同。taskdef没有注意到您移动的属性文件,因为您提供给
告诉它只查看jar。

我有一个有效的文件,并且在阅读了您的解释后,还将antcontrib.properties提取到了。/net/sf/antcontrib/,我意识到我可以删除属性文件,ant contrib任务仍然有效。我使用了安装页面中提到的taskdef(好提示;)但是,您使用的是
,但没有属性名
bin
。可能错误在
行中,其中
应替换为
bin
。。。干杯;-)
<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>
    <!-- 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>