Actualización a Grails 1.1.1 cuando uno tiene configurado IVY

Hace poco más de un mes, estamos trabajando fuertemente en el desarrollo de una (en realidad más de una) aplicación web construida con la herramienta de orquestación GRAILS. Es interesante como está construida porquemodule art panels, para los fanáticos de MAVEN (por ejemplo) da un paso más adelante y prepara una serie de cualidades en el entorno que simplifica mucho a la hora de desarrollar. Para quienes no entienden del tema, tendrán más detalles en un POST proximamente.

Una de estas aplicaciones que estamos desarrollando con Grails tiene configurado el plugin de IVY; IVY es un manejador de dependencias que está dentro del paquete de herramientas de Apache; cuando intentamos hacer el upgrade (desde la versión 1.1 a 1.1.1) nos encontramos con una serie de errores:

Error executing script Upgrade: : java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;ZZ)Ljava/io/File;
gant.TargetExecutionException: : java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;ZZ)Ljava/io/File;
        at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:331)
        at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)
        at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)
        at gant.Gant.withBuildListeners(Gant.groovy:344)
        at gant.Gant.this$2$withBuildListeners(Gant.groovy)
        at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
        at gant.Gant.dispatch(Gant.groovy:334)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.processTargets(Gant.groovy:495)
        at gant.Gant.processTargets(Gant.groovy:480)
Caused by: : java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;ZZ)Ljava/io/File;
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at Upgrade$_run_closure1.doCall(Upgrade:82)
        at Upgrade$_run_closure2.doCall(Upgrade:261)
        at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324)
        ... 10 more
Caused by: java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;ZZ)Ljava/io/File;
        at org.apache.tools.ant.taskdefs.optional.ReplaceRegExp.doReplace(ReplaceRegExp.java:326)
        at org.apache.tools.ant.taskdefs.optional.ReplaceRegExp.execute(ReplaceRegExp.java:527)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
        ... 17 more

Básicamente el problema es que el script que ejecuta GRAILS pone en classpath en primera instancia nuestro directorio lib, en condiciones normales esto sería lógico (porque nuestra aplicación puede usar una versión más nueva de algo que GRAILS no usa) pero en estas condiciones resulta en un error del script conocido como Upgrade.groovy es por eso que terminamos ese error.

¿Cuál es la solución? Fácil, movemos a un directorio temporario todo nuestro directorio lib, ejecutamos upgrade y volvemos a mover todo al lugar donde estaba 🙂 Tendremos la aplicación actualizada sin mayores problemas, jijiji.

La idea, no fue mía, fue obra y gracia de Google ;). Aquí el link original.


Discussion Area - Leave a Comment