Chciałem użyć groovy dla małego skryptu ftp i znalazłem ten post http://www.hhhhq.org/blog/2009/05/01/ftp-using-groovy-and-ant/ Ponieważ było kilka zależności, chciałem użyć Grape'a. Wszystkie zależności są rozwiązywane i obecne w pamięci podręcznej. Ale nie mogę zmusić Anta do znalezienia opcjonalnych zadań w innych bibliotekach. Zawsze mówiGroovy z problemem z klasą GrBo i 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)
Groovy wersja: 1.6.5 JVM: 1.6.0_15
Oto mój kod źródłowy
@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()
Jak widać Podejrzewam classloader bycia problem , wydaje się, że Grape nie wstrzykuje tam zależności. Każdy pomysł, jak mogę go uruchomić?
Cześć Chris, próbowałem swoje rozwiązanie i mam ten błąd: Caught: groovy.lang.MissingMethodException: Nie sygnatura metody: static groovy.lang.Grab.grab() ma zastosowanie do typów argumentów: (java.util.LinkedHashMap) wartości: [[grupa: org.codenarc, moduł: CodeNarc, wersja: 0.11, classLoader: org.codehaus .groovy.tools.RootLoader @ addbf1]] Możliwe rozwiązania: grep (java.lang.Object), wait(), dump(), any(), getAt (java.lang.String), wait (long) at CodeNarcTest.run (CodeNarcTest.groovy: 3). Jakieś pomysły? Używam groovy wersji 1.7.6 – Steven
Hi Steven, wydaje się, że zamiast tego używasz typu adnotacji [groovy.lang.Grab] (http://groovy.codehaus.org/gapi/groovy/lang/Grab.html) klasy [groovy.grape.Grape] (http://groovy.codehaus.org/gapi/groovy/grape/Grape.html). Czy możesz to sprawdzić? –
Ups, naprawiony. to chyba załatwiło sprawę. dzięki :-) – Steven