Taskdef class XConfToolTask cannot be found en Lenya

Apache Lenya es un administrador de contenidos desarrollado íntegramente en Java que basa su funcionamiento sobre Apache Cocoon, un framework para el manejo de procesos en serie de documentos XML.
El problema descrito a continuación no es exclusivo de Lenya, sino que puede aparecer al utilizar Ant en otros escenarios. Sin embargo presentamos el caso puntual ocurrido de modo de tener una referencia de este y su rápida solución.

Como referencia, el problema se originó trabajando sobre Linux, específicamente Fedora Core 5.

Varias de las operaciones de Lenya se basan en la ejecución de targets de Ant para, por ejemplo, copiar una publicación al directorio de Lenya sobre, por ejemplo, Tomcat, o desde el punto de partida para compilar la aplicación.

La configuración de los targets de Ant de Lenya está armada en base a múltiples archivos, algunos de los cuales hacen referencia a clases compiladas de Cocoon, que normalmente se encontrará en otra carpeta.

En una situación en particular encontramos que al ejecutar el siguiente comando:

./build.sh install-pub

para copiar una publicación nueva a Tomcat-JBoss, obteníamos la siguiente salida:

Buildfile: build.xml

init:
------------------- Apache Lenya 1.2.5 [1999-2005] ----------------
Building with Apache Ant version 1.6.5 compiled on March 6 2006
Using build file /root/apache-lenya-1.2.5-src/build.xml

prepare-cocoon:
Copying 5 files to /root/apache-lenya-1.2.5-src/build/lenya/webapp

BUILD FAILED
/root/apache-lenya-1.2.5-src/src/targets/init-build.xml:82: 
    taskdef A class needed by class XConfToolTask cannot be
 found:  XConfToolTask

Total time: 10 seconds

Al revisar las definiciones de los targets Ant encontramos que todo se encontraba en orden. Intentamos fijar en duro la ruta a la clase no encontrada (que sí existía dentro de Cocoon), sin éxito.

 

Causa

El problema se originó por utilizar el intérprete Java gij que normalmente se encuentra disponible en los sistemas Linux. Por diferencias de versiones/forma de encontrar librerías se produjo el error.

Solución

Se debe utilizar un JRE o JDK actualizado para evitar el problema. En nuestro caso particular seteamos la variable de entorno JAVA_HOME a la ruta de un JDK instalado y pudimos pasar del punto del error.

Una forma rápida de hacer esto (pero que sólo sirve durante la sesión actual) es:

  • con bash:
export JAVA_HOME=[ubicacion-JDK]
  • con tcsh:
setenv JAVA_HOME [ubicacion-JDK]