ऐसा करने के दो तरीके हैं जिनमें से दोनों संपीड़न को बंद करना शामिल हैं। Gradle पहले तो जार पद्धति का उपयोग करके इसे बंद ...
आप इस Gradle का उपयोग कर सकते
jar {
manifest {
attributes(
'Main-Class': 'com.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
}
मुख्य बात के साथ
shadowJar {
zip64 true
entryCompression = org.gradle.api.tasks.bundling.ZipEntryCompression.STORED
exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
manifest {
attributes 'Main-Class': 'com.my.project.Main'
}
}
(इस जवाब वास्तव में ओपी से आया) यहाँ कि संपीड़न बंद कर दिया गया है यानी
org.gradle.api.tasks.bundling.ZipEntryCompression.STORED
आप डॉक्स यहां पा सकते हैं
https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/bundling/ZipEntryCompression.html#STORED
हाँ आप इसे एक नया संग्रह पर के बारे में 40% की तेजी लाने के कर सकते हैं और एक जार पर 200 से अधिक% से संग्रहित आप पहले से ही rsync'd गए हैं। यह चाल जार को को संपीड़ित नहीं करना है, आप rsyncs chunking एल्गोरिदम का लाभ उठा सकते हैं।
मैं निम्न कमांड का इस्तेमाल किया वर्ग फ़ाइलों का एक बहुत कुछ के साथ एक निर्देशिका संपीड़ित करने के लिए ...
jar cf0 uncompressed.jar .
jar cf compressed.jar .
यह निम्न दो जार बनाया ...
-rw-r--r-- 1 rsync jar 28331212 Apr 13 14:11 ./compressed.jar
-rw-r--r-- 1 rsync jar 38746054 Apr 13 14:10 ./uncompressed.jar
ध्यान दें कि असंपीड़ित जार का आकार लगभग 10 एमबी बड़ा है।
मैं तो इन फ़ाइलों rsync'd और निम्न कमांड का प्रयोग उन्हें समय समाप्त हुआ। (नोट, संपीड़ित फ़ाइल के लिए संपीड़न को चालू करने पर भी थोड़ा प्रभाव पड़ा, मैं बाद में समझाऊंगा)।
संपीडित जार
time rsync -av -e ssh compressed.jar [email protected]:/tmp/
building file list ... done
compressed.jar
sent 28334806 bytes received 42 bytes 2982615.58 bytes/sec
total size is 28331212 speedup is 1.00
real 0m9.208s
user 0m0.248s
sys 0m0.483s
असम्पीडित जार
time rsync -avz -e ssh uncompressed.jar [email protected]:/tmp/
building file list ... done
uncompressed.jar
sent 11751973 bytes received 42 bytes 2136730.00 bytes/sec
total size is 38746054 speedup is 3.30
real 0m5.145s
user 0m1.444s
sys 0m0.219s
हम लगभग 50% की एक speedup प्राप्त की है। यह कम से कम rsync को गति और हम एक अच्छा बढ़ावा लेकिन क्या बाद में rsyncs जहां एक छोटा सा परिवर्तन किया गया है के बारे में मिलता है।
मैं निर्देशिका कि निर्मित आकार में 170 बाइट था जार घास काटना वे इस आकार के होते हैं से एक वर्ग फ़ाइल हटाया ..
-rw-r--r-- 1 rsycn jar 28330943 Apr 13 14:30 compressed.jar
-rw-r--r-- 1 rsync jar 38745784 Apr 13 14:30 uncompressed.jar
अब समय बहुत अलग हैं।
संपीडित जार
building file list ... done
compressed.jar
sent 12166657 bytes received 31998 bytes 2217937.27 bytes/sec
total size is 28330943 speedup is 2.32
real 0m5.435s
user 0m0.378s
sys 0m0.335s
असम्पीडित जार
building file list ... done
uncompressed.jar
sent 220163 bytes received 43624 bytes 175858.00 bytes/sec
total size is 38745784 speedup is 146.88
real 0m1.533s
user 0m0.363s
sys 0m0.047s
तो हम बड़े जार rsyncing में तेजी लाने के कर सकते हैं इस पद्धति का उपयोग एक बहुत फ़ाइलें। इसका कारण सूचना सिद्धांत से संबंधित है। जब आप डेटा को संपीड़ित करते हैं तो यह डेटा से आम बातों को हटा देता है यानी जो आपको छोड़ा जाता है, वह यादृच्छिक डेटा की तरह दिखता है, सर्वोत्तम कंप्रेसर इस जानकारी को और अधिक हटा देते हैं। किसी भी डेटा और अधिकांश संपीड़न एल्गोरिदम में एक छोटा सा परिवर्तन डेटा के आउटपुट पर नाटकीय प्रभाव डालता है।
पिन एल्गोरिथ्म प्रभावी रूप से चेकसम कि सर्वर और ग्राहक के बीच एक ही हैं खोजने के लिए rsync के लिए यह कठिन बना रही है और इस लिए इसे और अधिक डेटा स्थानांतरित करने की जरूरत है का मतलब है। जब आप इसे असम्पीडित करते हैं तो आप rsync को जो कुछ भी अच्छा करते हैं, उसे दो फाइलों को सिंक करने के लिए कम डेटा भेजते हैं।
टिप्पणी करते हुए में मामला किसी के जवाब।मुझे यह भी पता होना चाहिए। –
यह जेएआर को rsync के साथ अनपॅक करने और रिमोट मास्चिन पर फिर से ज़िप करने का विकल्प है? इस तरह rsync कम यातायात होने में सक्षम होना चाहिए। –
अच्छा, यह एक विकल्प है। हालांकि मैं स्रोत मशीन पर सबकुछ तैयार करना पसंद करूंगा। मुझे लगता है, इस समाधान के लिए बहुत सारे अनावश्यक I/O डिस्क संचालन की भी आवश्यकता होगी। –