2010-01-12 5 views
11
./net

Al declarar tareas de hormigas externos usando taskdef, por ejemplo antcontrib, la configuración propuesta es utilizar el taskdef followin:¿Por qué no taskdef hormiga no puede cargar un recurso externo

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

Esto funciona cuando antcontrib .properties se encuentra en net/sf/antcontrib relativo al archivo build.xml.

Pero cuando lo pongo en lib/net/sf/antcontrib y cambia el taskdef en

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

Ant no es capaz de encontrar el archivo de propiedades, que da el error

[taskdef] Could not load definitions from resource 
lib/net/sf/antcontrib/antcontrib.properties. It could not be found. 

Parece que hormiga trata el directorio lib por separado y no puede cargar un recurso taskdef desde allí.

Respuesta

5

Como dijo Alex, no debe necesitar para descomprimir el frasco. El <taskdef> puede cargar antcontrib.properties directamente fuera del contenedor.

El error que ha cometido se debe a que ha cambiado la ruta del recurso, pero la ruta al archivo dentro del jar/zip comprimido sigue siendo la misma. La tarea no está prestando atención al archivo de propiedades que movió porque el <classpath> que proporcionó a <taskdef> le dice que solo mire en el contenedor.

+1

Tenía un válido y tenía también extraje las propiedades antcontrib.properties en ./net/sf/antcontrib/ después de leer su explicación, me di cuenta de que podía eliminar el archivo de propiedades y las tareas ant-contrib aún funcionaban. Utilicé el taskdef mencionado en la página de instalación http://ant-contrib.sourceforge.net/#install – Ernelli

+0

Nos ha ahorrado horas de adivinanzas, en relación con la ruta de jar que era la clave. –

4

uso de recursos antlib.xml:

Aquí está la definición taskdef que utilizo:

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

No es necesario extraer nada del archivo JAR. Además, el atributo uri es opcional si no desea usar espacios de nombres con tareas antcontrib.

2

Para manejar classpath para las definiciones de tareas, utilizo un classpath ref en Ant, es mucho más fácil. Puede vincular un directorio que contenga clases, ya sea un directorio que contenga muchos .jar, ya sea (por supuesto) un solo .jar.

Por ejemplo:

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

Buen consejo;) Sin embargo, utiliza '', pero no hay ningún nombre de propiedad 'bin'. Tal vez el error está en la línea '' donde 'classes' debería ser reemplazado por' bin' ... Cheers ;-) – olibre

Cuestiones relacionadas