Quería usar groovy para un pequeño script ftp y encontré esta publicación http://www.hhhhq.org/blog/2009/05/01/ftp-using-groovy-and-ant/ Dado que había varias dependencias, quería usar Grape. Todas las dependencias se resuelven y están presentes en el caché. Pero no puedo hacer que Ant encuentre las tareas opcionales en las otras librerías. Siempre diceGroovy con el problema del cargador de clases de Grape y AntBuilder
Caught: : Problem: failed to create task or type ftp
Cause: the class org.apache.tools.ant.taskdefs.optional.net.FTP was not found.
This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
-ANT_HOME\lib
-the IDE Ant configuration dialogs
Do not panic, this is a common problem.
The commonest cause is a missing JAR.
This is not a bug; it is a configuration problem
at GrabTest.runMe(GrabTest.groovy:15)
at GrabTest.run(GrabTest.groovy:26)
maravilloso Versión: 1.6.5 JVM: 1.6.0_15
Aquí está mi código fuente
@Grab(group='ant', module='ant', version='[1.6.5,)')
@Grab(group='ant', module='ant-nodeps', version='[1.0,)')
@Grab(group='ant', module='ant-apache-oro', version='[1.0,)')
@Grab(group='ant', module='ant-commons-net', version='[1.0,)')
@Grab(group='apache-oro', module='jakarta-oro', version='[2.0.8,)')
@Grab(group='commons-net', module='commons-net', version='[1.4,)')
def runMe() {
// works
println getClass().getClassLoader().loadClass("org.apache.tools.ant.taskdefs.optional.net.FTP")
def ant = new AntBuilder()
println getClass().getClassLoader() //groovy.lang.GroovyClassLoader$InnerLoader
println ant.getClass().getClassLoader() //org.codehaus.groovy.tools.RootLoader
ant.ftp(server:"ftp.foo.com",
userid:"user",
password:"passwd",
passive:"yes",
verbose:"yes",
remotedir:"/pub/incoming",
binary:"yes") {
fileset(dir:".") { include(name:"**/*.gz") }
}
}
runMe()
Como se puede ver sospecho que el cargador de clases de causa de los problemas , parece que Grape no inyecta las dependencias allí. ¿Alguna idea de cómo puedo hacer que funcione?
Hola Chris, probé su solución y me sale este error: Atrapados: groovy.lang.MissingMethodException: No firma del método: static groovy.lang.Grab.grab() es aplicable para los tipos de argumento: (java.util.LinkedHashMap) values: [[group: org.codenarc, module: CodeNarc, version: 0.11, classLoader: org.codehaus .groovy.tools.RootLoader @ addbf1]] Posibles soluciones: grep (java.lang.Object), wait(), dump(), any(), getAt (java.lang.String), wait (long) at CodeNarcTest.run (CodeNarcTest.groovy: 3). ¿Algunas ideas? Estoy usando la versión de groovy 1.7.6 – Steven
Hola Steven, parece que estás usando el tipo de anotación [groovy.lang.Grab] (http://groovy.codehaus.org/gapi/groovy/lang/Grab.html) de la clase [groovy.grape.Grape] (http://groovy.codehaus.org/gapi/groovy/grape/Grape.html). ¿Puedes verificar esto, por favor? –
oops, arreglado. eso parecía haber hecho el truco. gracias :-) – Steven