जैसा कि अन्य ने नोट किया है, जार फ़ाइल को निष्पादन योग्य बनाने के लिए, एप्लिकेशन की प्रविष्टि बिंदु को प्रदर्शन Main-Class
फ़ाइल की विशेषता में सेट किया जाना चाहिए । यदि निर्भरता वर्ग की फाइलें ढह नहीं रही हैं, तो उन्हें Class-Path
मैनिफ़ेस्ट फ़ाइल की प्रविष्टि में सेट करने की आवश्यकता है ।
मैंने सभी प्रकार के प्लगइन संयोजनों की कोशिश की है और निष्पादन योग्य जार बनाने के सरल कार्य के लिए क्या और किसी तरह किसी और पर निर्भरता शामिल है। सभी प्लगइन्स में एक या दूसरे तरीके की कमी लगती है, लेकिन अंत में मुझे यह पसंद आया जैसे मैं चाहता था। कोई रहस्यमय स्क्रिप्ट, बिल्ड डाइरेक्टरी को प्रदूषित करने वाली एक लाख अलग-अलग मिनी फाइल्स नहीं, एक बहुत ही साफ बिल्ड स्क्रिप्ट फाइल, और सबसे ऊपर: एक मिलियन विदेशी थर्ड पार्टी क्लास फाइल्स मेरे जार आर्काइव में विलय नहीं हुईं।
आपकी सुविधा के लिए यहाँ से कॉपी-पेस्ट निम्नलिखित है ..
[कैसे करें] उपनिर्देशिका में निर्भरता जार के साथ एक वितरण ज़िप फ़ाइल बनाएँ /lib
और सभी निर्भरताएँ Class-Path
प्रकट फ़ाइल में प्रवेश करने के लिए जोड़ें :
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// /programming/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
यहां एक जिस्ट के रूप में होस्ट किया गया ।
परिणाम में पाया जा सकता है build/distributions
और अनजिप की गई सामग्री इस तरह दिखती है:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
की सामग्री MyJarFile.jar#META-INF/MANIFEST.mf
:
घोषणापत्र-संस्करण: 1.0
मुख्य-वर्ग: com.somepackage.MainClass
क्लास-पाथ: लिब / कॉमन्स- lang3-3.3.2.jar