如何使用';java';从命令行

如何使用';java';从命令行,java,command-line,groovy,Java,Command Line,Groovy,我必须将一些groovy代码发送给一些只安装了java的用户(没有groovy,没有$groovy_home,等等)。我正试图从命令行调用groovy,但运气不好。这是我的bat文件: java -classpath .;lib;bin;bin-groovy introspector.AclCollector 这是我的例外: Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

我必须将一些groovy代码发送给一些只安装了java的用户(没有groovy,没有$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 dir中有'groovy-all-1.6-beta-1.jar'。

我认为您需要在类路径中显式列出groovy jar

您有另一个groovy应用程序示例,名为from Java(在本例中,来自ant,但总体思路是相同的)

正如frankowyer所提到的,java的类路径参数中明确列出了groovy jar

由于您的客户机没有特殊的环境变量,只需将
%GROOVY\u HOME%/…
替换为以下内容的完整路径:

groovy.jar or
goovy-all-VERSION.jar (to minimize any conflict with other libraries)........
  • groovy.jar或
  • (尽量减少与其他库的冲突)

避免不同机器上不同类路径出现问题的一种方法是将所有必要的依赖项捆绑到一个jar中,这也会使分发给用户变得更容易。这可以通过这个“GroovyWrapper”脚本完成。默认情况下,脚本中包括默认的jar(embeddedable/groovy all-.jar和lib/commons.jar),如果需要其他jar,可以轻松添加它们

有关完整脚本和说明,请参阅

下面是一个如何使用GroovyRapper的示例:

假设您有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
VonC的伟大回答:

。。。。。。。由于您的客户没有特殊的环境变量, 只需更换
%GROOVY\u HOME%/
。。。完整路径为:

groovy.jar or
goovy-all-VERSION.jar (to minimize any conflict with other libraries)........
这是针对windows Vista的:

在系统属性|环境变量|用户变量中: 变量名
GROOVY\u HOME
设置为
C:\GROOVY\GROOVY-1.8.5
变量名
CLASSPATH
值被设置为包含
;%GROOVY\u HOME%\embeddeble\GROOVY-all-1.8.5.jar

不要犯我所犯的错误(让我的轮子转了一点),没有准备用“;”(点和分号):因为路径需要基本文件夹,所以你需要找到主类(看起来很奇怪)

小心[~!”

java -cp .:~/path-to-groovy-all.jar YourClassName     # does not work
java -cp ~/path-to-groovy-all.jar:. YourClassName     # works
java -cp .:/full/path/to/goovy-all.jar YourClassName  # works
在第一行中,tilde不是由bash处理的,java无法理解它


在第二行中,tilde被bash取代,一切正常。

这应该是一个注释,而不是单独的答案
GroovyRapper
使用
Ant
将groovy脚本构建到jar文件中。此构建也可以通过
Gradle
方式完成。看看是否有人喜欢它。