2016-01-18 17 views
5

Automate.groovy bir groovy komut dosyası var. Komutun bir sınıf tanımı veya ana yöntemi yoktur. Komut dosyasını içeren bir kavanoz oluşturmanın en kolay yolunu arıyorum. Aşağıdaki komutu kullanarak harika komut derleme çalıştı:Mükemmel bir betik ile yürütülebilir bir jar oluşturma

groovyc Automate.groovy 

Ayrıca ana sınıf

Main-Class: Automate 

belirten bir Bildiri dosyası tezahür-addition.txt var Ve ben komutunu kullanarak kavanozu oluşturuldu:

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

Bu

bana Automate.class ile bir kavanoz verdi ve $ 1.sınıf ve ana sınıfı ile bir Bariz dosyayı otomatik hale getirin. Ben java -jar Automate.jar kullanarak kavanozu çalıştırmaya uğraşırken Ama her zaman burada yanlış yapıyorum hata

cannot find or load main class Automate. 

olsun?

Kavanozu oluşturmak için böyle basit bir yol olmalı. Ben sadece kavanozda istediğim bir betik dosyası var ve bu işi bitirmek için maven/ant/gradle kullanmak istemiyorum. Bunu yapmanın basit ve basit bir yolu yok mu?

cevap

7

Sınıf dosyasında Groovy'ye bağımlılıklar var. Gömülü kavanozun kullanılması sorunu çözecektir.

Ben Automate.groovy

println "Hello from Automate.groovy" 

için bu komut dosyası var ve bu manifest.txt kullanırsanız, Groovy 2.4.5 kullanarak:

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

ve bu basit yapı komut:

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

ve run dizininde bunu gerçekleştiriyorum:

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

o zaman bu işler: gömülebilir kavanoz Automate.jar kendisi dahil edilip

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

çözüm çok daha iyi olacaktır. Bunun bir örneği, Gradle kullanarak this project'dur.

+0

Neden Automate.jar içindeki tüm jar'i dahil etmek daha iyi bir çözümdür? – RaGe

+0

Aslında java -cp groovy-all.jar Automate.jar kullanarak classpath groovy-all jar dahil olmak üzere çalıştı. O zaman bile aynı hatayı aldım. Aslında bir @Grab notu vardı ve bu aslında soruna neden olan şeydi. Onu kaldırdığımda ana sınıfı bulabildi – Harini

-1

Asıl sorun, komut dosyamda bulunan @Grab Ek Açıklamaydı. Bir Gradle projesi oluşturdum ve sadece bir println ifadesiyle çok basit bir yazı HelloWorld.groovy ekledim, aynı zamanda bir şeyi içe aktarmak için bir @Grab kullandım. Kavanozu oluşturduğumda ana sınıfı bulamayacaktı. Etrafa baktığımda @Grab ek açıklamasının, önceden yazılmış komut dosyası için değil, bağımsız komut dosyalarında kullanıldığını buldum. Eğer derlenmiş groovy'nizde @Grab'a sahip olmanız gerekiyorsa, ek bir sarmaşık bağımlılığı eklemeniz veya @Grab'a sahip olmamanızı ve bağımlılıkları eklemek için başka bir yol kullanmamayı seçmeniz gerekir. @Grab 'ı komutumdan kaldırdım ve daha sonra oluşturdum. Kavanoz iyi çalışır.

Gradle/Maven'i kullanmak istemediğimden sapma için üzgünüm. Neredeyse iki gün boyunca stackoverflow ve google'da bulabildiğim her şeyi denedim ve Gradle'ı denedim. Bu sorunun tek çözümü olup olmadığından emin değilim ama bu benim için çalıştı.