14

Java しかインストールされていない (grooy や $groovy_home などがない) 一部のユーザーに、いくつかの groovy コードを出荷する必要があります。コマンドラインから groovy を呼び出そうとしていますが、うまくいきません。ここに私のバットファイルがあります:

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」があります。

4

5 に答える 5

14

ここに Java から呼び出された Groovy アプリの別の例があります (この場合は ant からですが、一般的な考え方は同じです)。

java -cp [...];%GROOVY_HOME%/embeddable/groovy-all-1.5.4.jar;[..]

frankowyer が述べたように、正確な groovy jar が Java のクラスパス引数に明示的にリストされています。

クライアントには特別な環境変数がないため、%GROOVY_HOME%/...を次への完全なパスに置き換えるだけです。

  • groovy.jar または
  • goovy-all-VERSION.jar (他のライブラリとの競合を最小限に抑えるため)
于 2008-12-18T20:00:35.193 に答える
9

クラスパスにgroovy jarを明示的にリストする必要があると思います

于 2008-12-18T19:25:48.600 に答える
8

異なるマシン上の異なるクラス パスの問題を回避する 1 つの方法は、必要なすべての依存関係を 1 つの 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
于 2011-08-02T15:50:01.393 に答える
1

VonC による素晴らしい回答:

....... クライアントには特別な環境変数がないため、%GROOVY_HOME%/... を次の完全なパスに置き換えます。

groovy.jar or
goovy-all-VERSION.jar (to minimize any conflict with other libraries)........

これは Windows Vista の場合です。

システムのプロパティ | 環境変数 | ユーザー変数: 変数名GROOVY_HOMEが設定されC:\groovy\Groovy-1.8.5 、変数名CLASSPATHの値が含まれるように設定されています.;%GROOVY_HOME%\embeddable\groovy-all-1.8.5.jar

「groovy-all」のパスの前に「.;」を付けないという、私がした間違いをしないでください(少し車輪を回転させます)。(ドットとセミコロン): パスには、メイン クラスを見つけるために現在いるベース フォルダーが必要なため (奇妙に思えます)

于 2012-02-04T08:30:31.397 に答える