2012-03-17 1 views
35

के साथ एक ग्रोवी निष्पादन योग्य JAR बनाएं यह मेरी ग्रेडल बिल्ड स्क्रिप्ट है।ग्रैडली

apply plugin: 'groovy' 

project.group = "test.tree" 
archivesBaseName = "tree" 
project.version = "1.0" 
manifest.mainAttributes("Main-Class" : "test.tree.App") 

sourceCompatibility=1.6 
targetCompatibility=1.6 

repositories { 
    mavenCentral() 
} 

dependencies { 
    groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.6' 
    testCompile group: 'junit', name: 'junit', version: '4.8.2' 
} 

और यह ठीक

समस्या यह है कि मैं बनाया जार नहीं चलाया जा सकता है संकलित, मैं एक अपवाद java.lang.NoClassDefFoundError: groovy/lang/GroovyObject

तो मुझे लगता है कि ग्रूवी प्लगइन सभी शामिल नहीं है मिल जार के अंदर आवश्यक कक्षाएं।

मैं एक स्टैंडअलोन JAR कि मैं बस .. चला सकते हैं ;-)

+0

यहां से सभी युक्तियों को पढ़ने के बाद और http://github.com/AvatarQing/groovy-executable-jar-with-gradle-example का उपयोग करने के बाद, मैंने एक जार फ़ाइल बनाई जो एक ग्रोवी स्क्रिप्ट लेता है और निष्पादन योग्य जार बनाता है: https://github.com/krishnact/uberifier। जार फ़ाइल है: https://github.com/krishnact/uberifier/blob/master/bin/Uberifier-1.0.0.jar?raw=true – Krishna

उत्तर

45

क्या आप देख रहे हैं application plugin जो आप सभी निर्भरता और चलाने लिपियों सहित एक स्टैंडअलोन JVM आवेदन का निर्माण की अनुमति देता है कैसे बनाने के लिए।

apply plugin:'application' 
mainClassName = 'test.tree.App' 

संपादित करें:

यह uberjar आप चाहते हैं बनाना चाहिए:

task uberjar(type: Jar) { 
    from files(sourceSets.main.output.classesDir) 
    from configurations.runtime.asFileTree.files.collect { zipTree(it) } 

    manifest { 
     attributes 'Main-Class': 'test.tree.App' 
    } 
} 
+0

यह अच्छा है, मुझे 'distZip' कार्य पसंद है, लेकिन मैं क्या चाहते हैं कि 'distjar' कार्य की तरह smt है -> एक स्वाद जो सभी आवश्यक वर्गों (मेरा, groovy आरटी ...) के साथ एक निष्पादन योग्य जार बनाता है। – emesx

+1

मैं आपकी आवेदन कक्षाओं को बाह्य निर्भरताओं से अलग रखने की अनुशंसा करता हूं। यदि आप वास्तव में एक uberjar बनाना चाहते थे [इस तरह आप इसे कैसे कर सकते हैं] (https://github.com/bmuschko/gradle-tomcat-plugin/blob/master/build.gradle#L26)। बेशक आप subprojects के बजाय बाहरी निर्भरताओं का उपयोग करेंगे। –

+3

@ बेंजामिन द्वारा प्रदान किए गए कोड के आधार पर नमूना प्रोजेक्ट बनाया गया: https://github.com/bond-/gradle-groovy-jar-example – Raviteja

1

निम्नलिखित कोड भी ठीक, उपयोग वसंत बूट प्लगइन है

buildscript { 
    ext { 
     springBootVersion = '1.2.6.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    } 
} 

apply plugin: 'groovy' 
apply plugin: 'eclipse' 
apply plugin: 'spring-boot' 


sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 


sourceSets { 
    main { 
     groovy { 
      srcDirs = ['src'] 
     } 
    } 

    /*test { 
     groovy { 
      srcDirs = ['test/groovy'] 
     } 
    }*/ 
} 

dependencies { 
    compile "com.alibaba:fastjson:1.1.34" 
    compile 'org.codehaus.groovy:groovy-all:2.4.5' 
    //testCompile group: 'junit', name: 'junit', version: '4.8.2' 
} 
springBoot { 
    backupSource = false 
    mainClass = "com.zhb.hello.Hello" 
} 
jar{ 
    baseName = 'hellogroovy' 
    version = '1.1.0' 
} 
0

मैं एक में फेंक देंगे shadow gradle plugin के लिए वोट दें। यह उबेर जार बनाने में सक्षम है और dependency hell को रोकने के लिए कक्षा स्थानान्तरण जैसी चीजों की काफी बहुमुखी और सक्षम है।

मैं दो प्लगइन की तुलना नहीं कर पाऊंगा, लेकिन मैं कहूंगा कि मैंने कहा कि मैंने अतिरिक्त सुविधाओं के कारण अतीत में उपयोग किए जाने वाले अनुप्रयोग से छाया का उपयोग करने के लिए गुरुत्वाकर्षण किया है।

जब मैं @Grab आधारित groovy स्क्रिप्ट के स्टार्टअप समय से थक जाता हूं, तो मैं एकल फ़ाइल ग्रोवी स्क्रिप्ट के लिए छाया प्लगइन का उपयोग करके एक ग्रेडल बिल्ड फ़ाइल लिखता हूं। वर्तमान निर्देशिका में एक ग्रोवी स्क्रिप्ट फ़ाइल के uber जार बनाने में सक्षम एक उदाहरण ग्रेडल बिल्ड फ़ाइल। मुख्य वर्ग के नाम स्क्रिप्ट फ़ाइल नाम के अनुरूप करने की जरूरत है:

repositories { 
    jcenter() 
    mavenCentral() 
} 

defaultTasks = ['shadowJar'] 
version  = "1.0" 

dependencies { 
    compile "org.codehaus.groovy:groovy:2.4.7", 
      "commons-cli:commons-cli:1.2" 
} 

sourceSets { 
    main { 
    groovy { 
     srcDirs = [rootDir] 
    } 
    } 
} 

project.tasks.remove jar 

shadowJar { 
    manifest { 
    attributes 'Main-Class': 'MyGroovyScriptName' 
    } 

    classifier = "" 
} 

uber जार build/libs निर्देशिका में उत्पन्न हो जाएगा।