दिलचस्प पोस्ट
एक्शन फ़िल्टर में सेवा इंजेक्ट करें गहरी लैम्ब्डा अभिव्यक्ति में नल की जांच कैसे करें? PHP बनाम टेम्पलेट इंजन INITifyProperty को लागू करें उत्पन्न इकाई फ़्रेमवर्क क्लासेस पर परिवर्तित PHP चेतावनी: कॉल-टाइम पास-बाय-संदर्भ को बहिष्कृत कर दिया गया है JAXB का उपयोग करके सीडीएटीए ब्लॉक कैसे उत्पन्न किया जाता है? DataGridView टेक्स्टबॉक्स कॉलम को बहु-पंक्ति में कैसे सेट करें? 0x अंकन का मतलब क्या है? एक सामान्य सूची को एक CSV स्ट्रिंग में परिवर्तित करना क्या MySQL के DESCRIBE के लिए एक SQLite समकक्ष है? jquery क्लिक के शुद्ध जावास्क्रिप्ट समकक्ष ()? भौतिक फ़ाइल के बजाय मेमोरी में पीडीएफ़ बनाएं क्या pyplot.imshow () ऑब्जेक्ट को numpy array में कनवर्ट करने का एक तरीका है? उपयोगकर्ता को लॉगिन / अनुमति देने के लिए बाध्य किए बिना सार्वजनिक फेसबुक पेज की गतिविधि फीड को एम्बेड करें स्काला एकाधिक प्रकार के पैटर्न मिलान

निर्भरता के साथ एक जार बनाने के लिए Gradle का उपयोग करना

मेरे पास एक मल्टीप्रोजेक्ट बिल्ड है और मैंने एक उप-प्रोजेक्ट में से एक में एक मोटी जार बनाने के लिए एक कार्य किया है। मैंने रसोई की किताब में वर्णित एक जैसा काम बनाया है।

jar { from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' } } 

इसे चलाने से निम्नलिखित त्रुटि होती है:

कारण: आप एक कॉन्फ़िगरेशन नहीं बदल सकते जो अनसुलझे राज्य में नहीं है!

मुझे यकीन नहीं है कि इस त्रुटि का अर्थ क्या है मैंने यह भी ग्रेडल जिरा के बारे में बताया, अगर यह एक बग है

Solutions Collecting From Web of "निर्भरता के साथ एक जार बनाने के लिए Gradle का उपयोग करना"

मैंने ग्रेरा के खिलाफ जीआईआरए में एक समाधान पोस्ट किया:

 // Include dependent libraries in archive. mainClassName = "com.company.application.Main" jar { manifest { attributes "Main-Class": "$mainClassName" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 

यदि आप jar कार्य को सामान्य रूप से व्यवहार करना चाहते हैं और एक additinal fatJar कार्य चाहते हैं, तो निम्न का उपयोग करें:

 task fatJar(type: Jar) { baseName = project.name + '-all' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar } 

with jar महत्वपूर्ण हिस्सा है। इसके बिना, इस परियोजना के वर्ग शामिल नहीं हैं।

@ फेलिक्स का जवाब लगभग मुझे वहाँ लाया। मुझे दो समस्याएं थीं:

  1. ग्रेड 1.5 के साथ, मैनिफ़ेस्ट टैग को वेटजार कार्य के अंदर पहचाना नहीं गया था, इसलिए मेन-क्लास विशेषता को सीधे सेट नहीं किया जा सका
  2. जार बाहरी मेटा-आईएनएफ फाइलों पर विरोधाभासी था।

निम्न सेटअप इस को हल करता है

 jar { manifest { attributes( 'Main-Class': 'my.project.main', ) } } task fatJar(type: Jar) { manifest.from jar.manifest classifier = 'all' from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } { exclude "META-INF/*.SF" exclude "META-INF/*.DSA" exclude "META-INF/*.RSA" } with jar } 

इकट्ठा या निर्माण कार्य मानक जोड़ने के लिए, जोड़ें:

 artifacts { archives fatJar } 

एक मुख्य निष्पादन योग्य वर्ग के साथ वसा जार जेनरेट करने के लिए, हस्ताक्षरित जारों के साथ समस्याओं से बचने के लिए, मैं ग्रेडले-वन-जार प्लगइन का सुझाव देता हूं। वन-जेआर परियोजना का उपयोग करने वाला एक सरल प्लगइन

प्रयोग करने में आसान:

 apply plugin: 'gradle-one-jar' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.github.rholder:gradle-one-jar:1.0.4' } } task myjar(type: OneJar) { mainClass = 'com.benmccann.gradle.test.WebServer' } 

यह मेरे लिए ठीक काम करता है

मेरा मुख्य वर्ग:

 package com.curso.online.gradle; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; public class Main { public static void main(String[] args) { Logger logger = Logger.getLogger(Main.class); logger.debug("Starting demo"); String s = "Some Value"; if (!StringUtils.isEmpty(s)) { System.out.println("Welcome "); } logger.debug("End of demo"); } } 

और यह मेरी फ़ाइल build.gradle की सामग्री है:

 apply plugin: 'java' apply plugin: 'eclipse' repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' compile 'org.apache.commons:commons-lang3:3.0' compile 'log4j:log4j:1.2.16' } task fatJar(type: Jar) { manifest { attributes 'Main-Class': 'com.curso.online.gradle.Main' } baseName = project.name + '-all' from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar } 

और मैं अपने कंसोल में निम्नलिखित लिखता हूं:

 java -jar ProyectoEclipseTest-all.jar 

और उत्पादन महान है:

 log4j:WARN No appenders could be found for logger (com.curso.online.gradle.Main) . log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more in fo. Welcome 

सरल उपाय

 jar { manifest { attributes 'Main-Class': 'cova2.Main' } doFirst { from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } } } 

यदि आप चींटी के लिए उपयोग कर रहे हैं तो आप भी Gradle के साथ भी कोशिश कर सकते हैं:

 task bundlemyjava{ ant.jar(destfile: "build/cookmyjar.jar"){ fileset(dir:"path to your source", includes:'**/*.class,*.class', excludes:'if any') } }