2009-05-28 5 views
12

javaと同様にドットでパッケージを指定してGroovyクラスを実行する方法はありますか?パッケージ内のGroovyクラスをコマンドラインから実行する

例:私は仕事への最後のコマンドを期待していた

package my.package 

class MyClass { 
    static void main(String[] args) { 
    println "ok" 
    } 
} 
 
> cd my/package 
my/package> groovy MyClass 
ok 
> cd ../.. 
> groovy my/package/MyClass.groovy 
ok 
> groovy my/package/MyClass 
ok 
> groovy my.package.MyClass 
Caught: java.io.FileNotFoundException: my.package.MyClass 

:./my/package/MyClass.groovyファイル。私はクラスパスを設定するさまざまな方法を試してみましたが、無駄です。

答えて

14

まず、パッケージは予約済みのキーワードなので、パッケージ名として使用することはできません。

第2に、ドット記法はスクリプトではなくクラスに使用されるので、Groovyで行うことはできません。そのため、コンパイルされたクラスファイルが必要です。

それでも、あなたは、java +クラスパスでグルーヴィーなコマンドを置き換えることができます。

java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar:. my.some.MyClass

をあなたはそれがあまり冗長にするために、それにインスタンスのための「g_java」をエイリアスを追加することができます。

+0

正解のように聞こえるが、うまくいきません。私は "my.package"を例として使用しました。とにかく、受け入れ可能なパッケージ名であってもgroovycでコンパイルした後でも、動作しません。 groovyc my/some/MyClass.groovy エクスポートCLASSPATH =。 lsの私の/いくつか/ MyClass.class 私の/いくつか/ MyClass.classキャッチ グルーヴィーmy.some.MyClass :java.io.FileNotFoundException:/Users/olivier/my.some.MyClass(/ユーザ/オリヴィエ/ my.some.MyClass) ? –

+0

あなたは正しいです、私はそれを見逃したか分かりません。不正な気にならない場合は、groovyコマンドをjava + classpath: java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar:で置き換えることができます。 my.some.MyClass たとえば、 'g_java'にエイリアスを追加して、冗長性を少なくすることができます。 –

+0

ありがとうございます。できます。だから、私の元々の質問に対する答えは:いいえ、Groovyではこのように動作しません。 javacとjavaを使用する必要があります。 –