我必须将一些groovy代码发送给一些只安装了java的用户(没有grooy,没有$ groovy_home等).我试图从命令行调用groovy,但我没有运气.这是我的bat文件:
java -classpath .;lib;bin;bin-groovy introspector.AclCollector
这是我的例外:
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 12 more Could not find the main class: introspector.AclCollector. Program will exit.
有人有线索吗?我在\ lib目录中有'groovy-all-1.6-beta-1.jar'.
你在这里有一个从Java调用的Groovy app的另一个例子(在这种情况下,来自ant,但总体思路是一样的).
java -cp [...];%GROOVY_HOME%/embeddable/groovy-all-1.5.4.jar;[..]
正如frankowyer所提到的,你在java的classpath参数中明确列出了确切的groovy jar.
由于您的客户端没有特殊的环境变量,只需%GROOVY_HOME%/...
将完整路径替换为:
groovy.jar或
goovy-all-VERSION.jar(尽量减少与其他库的冲突)
我认为你需要在类路径中明确列出groovy jar
避免不同机器上不同类路径出现问题的一种方法是将所有必需的依赖项捆绑到一个jar中,这样也可以更轻松地分发给用户.这可以通过这个'GroovyWrapper'脚本完成.默认情况下,默认情况下包含默认的jar(embeddable/groovy-all- .jar和lib/commons .jar),如果您需要其他JARS,则可以轻松添加它们.
有关完整脚本和说明,请参阅http://docs.codehaus.org/display/GROOVY/WrappingGroovyScript.
这是一个如何使用GroovyWrapper的示例:
假设您有groovy脚本HelloWorld.groovy,使用GroovyWrapper构建HelloWorld.jar,如下所示:
$ groovy GroovyWrapper -c -m HelloWorld
GroovyWrapper将脚本HelloWorld.groovy编译为HelloWorld.class,并创建一个自执行jar的HelloWorld.jar.
现在,只需运行以下命令即可使用HelloWorld.jar启动HelloWorld脚本:
$ java -jar HelloWorld.jar