Portál AbcLinuxu, 7. května 2025 10:00

Dotaz: Groovy spuštění bytecode

4.7.2010 17:17 Dan542
Groovy spuštění bytecode
Přečteno: 313×
Odpovědět | Admin
Dobrý den,
v gentoo jsem si nainstaloval groovy a chtěl jsem ho otestovat. Vytvořil jsem si soubor hello.groovy a do něho napsal: println "Hello World!". Poté jsem ho chtěl spustit, zkusil jsem příkaz groovy hello.groovy a zobrazilo se Hello World!. Super! Tak jsem chtěl zkusit kompilaci do bytecode a spuštění .class souboru. Skompiloval jsem příkazem groovyc hello.groovy, ale když jsem to chtěl spustit příkazem java hello nahlasilo to chybu Exception in thread "main" java.lang.NoClassDefFoundError. Na internetu jsem zjistil, že mám nastavit CLASSPATH na cestu k groovy-all-*.jar. Bohužel takovýto soubor na mém počítači nebyl. V komentáři k ebuildu je:
# We currently do not build the embeddable jar (which is created using JarJar).
# We could provide that via an USE flag.
# We also don't use automatic build rewriting as there seems to be already some level of support
# in the upstream build system 
takže tam soubor není. Odinstaloval jsem groovy z portage a podle postupu z http://groovy.codehaus.org/Installing+Groovy jsem nainstaloval groovy 1.7.3. Když jsem zopakoval postup kompilace a spuštění tak to hlásí
Exception in thread "main" java.lang.NoClassDefFoundError: hello
Caused by: java.lang.ClassNotFoundException: hello
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
Could not find the main class: hello. Program will exit.
V mém CLASSPATH je /opt/groovy/embeddable/groovy-all-1.7.3.jar . Zkoušel jsem i java -cp $CLASSPATH hello a výsledek byl stejný. Hledal jsem na internetu, ale vyřešit se mi to nepodařilo. Neví někdo co dělám špatně.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.7.2010 21:41 kuka
Rozbalit Rozbalit vše Re: Groovy spuštění bytecode
Odpovědět | | Sbalit | Link | Blokovat | Admin
groovy neznam, nicmene pokud vim, tak aktualni adresar neni defaultne v classpath (asi z podobnych duvodu jako neni automaticky v ceste napr. v bashi). tzn. java -cp $CLASPATH:./ muze pomoct, pokud je tedy hello.class v aktualnim adresari
4.7.2010 21:54 Dan542
Rozbalit Rozbalit vše Re: Groovy spuštění bytecode
Díky, ale bohužel to nefunguje, výstup:
$java -cp $CLASPATH:./ hello
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/Script
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:632)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
Caused by: java.lang.ClassNotFoundException: groovy.lang.Script
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
	... 11 more
Could not find the main class: hello. Program will exit.
5.7.2010 14:08 Dan542
Rozbalit Rozbalit vše Re: Groovy spuštění bytecode
Vyřešeno!

CLASSPATH se musí zadat již při kompilaci do bytecode, takže se to skompiluje a spustí takto:
$ groovyc -cp $CLASSPATH:./ hello.groovy
$ java -cp $CLASSPATH:./ hello
Hello World
$ 
Pro větši pohodlí jsem do classpath přidal aktuální adresář:
export CLASSPATH=$CLASSPATH:./
Poté to už šlo normálně. Děkuji za radu s aktuálním adresářem.
5.7.2010 14:11 Dan542
Rozbalit Rozbalit vše Re: Groovy spuštění bytecode
PS: Jak označím dotaz za vyřešený?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.