Wywoływanie groovy skrypt korzystając CLASSPATH prefiks następująco działa dobrze:Dlaczego nie używasz argumentu classpath?
CLASSPATH=/path/to/classes groovy -e "(new stuff.XMLUtils()).printIt('test string')"
ale zmieniając go użyć argumentu ścieżce klasy nie:
groovy -classpath /path/to/classes -e "(new stuff.XMLUtils()).printIt('test string')"
i daje błąd:
script_from_command_line: 1: unable to resolve class stuff.XMLUtils
Czy ktoś może wyjaśnić, dlaczego tak jest? (The stuff.XMLUtils to tylko niektóre Groovy skrypt I została skompilowana w/ścieżka/do/classes )
robiłem jakieś dochodzenie, a wykorzystujące następujące groovy skrypt zrzucić classloader
def printClassPath(classLoader) {
println "$classLoader"
classLoader.getURLs().each {url->
println "- ${url.toString()}"
}
if (classLoader.parent) {
printClassPath(classLoader.parent)
}
}
printClassPath this.class.classLoader
z -classpath
arg, nie widzę wpis w classloader dla przekazany w ścieżce klasy arg, (w rzeczywistości, tylko katalog jest obecny roboczego dir), np:
[email protected]
[email protected]
[email protected]
- file:/usr/share/java/ant.jar
- ... (removed for brevity)
- file:/home/admin/groovy/
[email protected]
- file:/usr/java/jdk1.6.0_23/jre/lib/ext/sunjce_provider.jar
- ...
Korzystanie wersję CLASSPATH=...
pokazuje, że Wpis PWD abo ve jest zastąpione przez wartość ustawioną w zmiennej.
A jeśli dodaję debugowanie do pliku wykonywalnego powłoki groovy, różnica w wywołaniu java jest taka, że wersja arg -classpath
nie dodaje żadnego wpisu do wpisu ścieżki klasy java (co jest ostatecznie powodem, dla którego daje błąd klasy nie znaleziono), ale Wersja CLASSPATH=...
dodaje ścieżkę.
Czy to błąd w groovy?
EDIT: prosty przykład braku
- - - - xu.groovy
package stuff
def printIt(string) { println string }
- - - -
groovyc -d classes xu.groovy
groovy -cp classes -e "(new stuff.xu()).printIt('test')" # fails
CLASSPATH=classes groovy -e "(new stuff.xu()).printIt('test')" # works
Jeśli usunąć pakiet i odniesień do stuff
przykładem braku będzie działać dobrze.
Używam systemu Linux, Fedora 15. Wersja groovy 'Groovy Version: 1.8.0 JVM: 1.6.0_22'. –
@Mark Na oficjalnej stronie internetowej nie ma jeszcze wersji 1.8.0, więc nie mogę ci pomóc. Zrobiłem również test z groovy w wersji 1.8.2, ale wszystko działa dobrze. Polecam więc ulepszyć groovy. Pozdrowienia –
Czy próbowałeś dodać pakiet do testowanego skryptu? Udało mi się uruchomić '-classpath' lub' CLASSPATH = ... ', jeśli usunę instrukcję pakietu i będę miał wszystko na domyślnym poziomie pakietu, ale zaraz po dodaniu linii 'pakiet stuff' na górę i kompilacja, groovy nie znajduje go w argumencie "-classpath". Próbowałem tego na innym komputerze z wersją 1.8.4 i nadal ten sam problem. Zaktualizowałem moje pytanie, podając szczegółowy przykład. –