2016-01-18 46 views
5

私はGroovyスクリプトAutomate.groovyを持っています。スクリプトには、クラス定義またはメインメソッドがありません。私は、スクリプトを含むjarを作成する最も簡単な方法を探しています。私は、次のコマンドを使用して、グルーヴィーなスクリプトをコンパイルしてみました:groovyスクリプトを使って実行可能なjarファイルを作成する

groovyc Automate.groovy 

私も

Main-Class: Automate 

をメインクラスを指定するマニフェストファイルマニフェスト-addition.txtを持っていると私は、コマンドを使用してjarファイルを作成しました:

jar cvfm Automate.jar mainfest-addition.txt *.class 

これは私にAutomate.classとAutomate $ 1.classを持つjarとMainクラスのManifestファイルを与えました。私はjava -jar Automate.jarを使用してjarファイルを実行しようとしたとき、しかし、私は常にエラーを取得

cannot find or load main class Automate. 

は、私はここで間違って何をしているのですか?

jarファイルを作成するには、このような簡単な方法が必要です。私はちょうど私が私の瓶の中に望むこの1つのスクリプトファイルを持っています、そして、私はこの仕事をするためにmaven/ant/gradleを使いたくありません。これを行う簡単で簡単な方法はありませんか?

答えて

7

クラスファイルはGroovyに依存しています。埋め込み可能なjarを使用すると問題が解決されます。

私はAutomate.groovy

println "Hello from Automate.groovy" 

ため、このスクリプトを持っており、このmanifest.txt使用している場合、Groovyの2.4.5の使用:

Main-class: Automate 
Class-path: jar/groovy-all-2.4.5.jar 

と、この単純なビルドスクリプト:

rm *.class 
groovyc Automate.groovy 
jar cvfm Automate.jar manifest.txt Automate.class 

と実行ディレクトリでは、これを実行します。

bash$ mkdir jar 
bash$ cp $GROOVY_HOME/embeddable/groovy-all-2.4.5.jar jar 

が、これは動作します:組み込み可能なjarファイルがAutomate.jar自体に含まれている場合

bash$ java -jar Automate.jar 
Hello from Automate.groovy 

ソリューションははるかに良くなります。 Gradleを使用したその例は、this projectです。

+0

Groovy-All JarをAutomate.jarに含めると、より良い解決策になるのはなぜですか? – RaGe

+0

私はgroovy-all jarをjava -cp groovy-all.jar Automate.jarを使ってクラスパスに含めようと実際に試しました。それでも私は同じエラーが出ます。私は実際に@Grabアノテーションを持っていて、それが実際に問題を引き起こしていたものです。私はそれを削除したとき、それはメインクラスを見つけることができました – Harini

-1

実際の問題は、スクリプトにあった@Grab注釈でした。私はGradleプロジェクトを作成し、非常に単純なスクリプトHelloWorld.groovyをprintlnステートメントで1つだけ追加しましたが、何かをインポートするために@Grabも使用しました。私が瓶を作ったとき、それは主なクラスを見つけることができませんでした。私が周りを探索したところ、@Grabアノテーションはスタンドアロンスクリプトで使用され、プリコンパイルされたスクリプトでは使用されないことが判明しました。コンパイルされたgroovyに@Grabを置く必要がある場合は、追加のivy依存関係を追加するか、@Grabを持たないようにして、他の方法で依存関係を組み込む必要があります。私はスクリプトから@Grabを削除し、それを作成しました。その瓶はうまくいった。

申し訳ありませんが、私はGradle/Mavenを使用したくないという事実から逸脱しています。私はstackoverflowとgoogleで見つけることができるすべてのものを試して二日間を費やし、Gradleを試してしまった。これが問題の唯一の解決策であるかどうかはわかりませんが、これは私のために働いていました。

関連する問題