मैं अपने आप को हाल ही में आश्चर्यचकित कर रहा था कि एलेस्टिक्स खोज क्यों और निर्भरता के कुछ (लेकिन सभी नहीं) को स्थानांतरित करता है। यहाँ परियोजना के अनुचर से एक स्पष्टीकरण है, @kimchy :
छायांकन भाग जानबूझकर है, शेडेड लाइब्रेरी जो हम इलास्टिक्स खोज में उपयोग करते हैं, वे सभी इलास्टिक्स खोज के इरादे और उद्देश्य भाग के लिए हैं, उपयोग किए गए संस्करण को एलीस्टेक खोज में बारीकी से बांधा गया है और यह लाइब्रेरी के आंतरिक भाग के आधार पर पुस्तकालय का उपयोग कैसे करता है (और) संस्करणों के बीच परिवर्तन), कुलीनता और अमरूद इसके महान उदाहरण हैं।
Btw, मैं वास्तव में elasticsearch के कई जार प्रदान करने के साथ कोई समस्या नहीं है, एक ल्यूसिन छायांकित नहीं है, और एक लुसियाना छायांकित के साथ। हालांकि यह सुनिश्चित नहीं है कि इसे मावेन के साथ कैसे किया जाए। मैं एक ऐसा संस्करण प्रदान नहीं करना चाहता, जो उदाहरण के लिए नेट्टी / जैकसन को शेड न करता हो, क्योंकि गहरी अंतरंग उपयोग एलिटिक्स खोज उनके साथ है (उदाहरण के लिए, मौजूदा एक को छोड़कर नेट्टी के किसी भी पिछले संस्करण के साथ आगामी बफ़रिंग सुधार का उपयोग करना। वास्तव में काफी कम उपयोग करने की तुलना में अधिक मेमोरी का उपयोग करें)।
- https://github.com/elasticsearch/elasticsearch/issues/2091#issuecomment-7156766
और दूसरा यहाँ से ड्रूवर :
छायांकन हमारे कोड के पास हमारी निर्भरता (विशेष रूप से कुलीनता, ल्यूसीन, अमरूद) को बनाए रखने के लिए महत्वपूर्ण है ताकि हम एक समस्या को ठीक कर सकें, भले ही अपस्ट्रीम प्रदाता पीछे रह जाए। यह संभव है कि हम कोड के मॉड्यूलर संस्करण वितरित करेंगे, जो आपके विशेष अंक (उदाहरण के लिए # 2091) के साथ मदद करेगा, लेकिन हम इस समय केवल छायांकित निर्भरता को नहीं निकाल सकते। आप अपने उद्देश्यों के लिए ES का एक स्थानीय संस्करण बना सकते हैं जब तक कि एक बेहतर समाधान न हो।
- https://github.com/elasticsearch/elasticsearch/pull/3244#issuecomment-20125252
तो, यह एक उपयोग मामला है। उदाहरण के लिए, नीचे इलास्टिक खोज के pom.xml (v0.90.5) में मावेन-शेड-प्लगइन का उपयोग किस प्रकार किया गया है। artifactSet::include
लाइनों यह हिदायत क्या uber जार (मूल रूप से, वे अनज़िप कर रहे हैं और और elasticsearch की अपनी कक्षाओं के साथ फिर से पैक किया जब लक्ष्य elasticsearch जार का उत्पादन किया है। (मामले में आप यह पहले से ही पता नहीं था में खींचने के लिए निर्भरता, एक जार फ़ाइल है सिर्फ एक ज़िप फ़ाइल जिसमें प्रोग्राम की कक्षाएं, संसाधन, आदि और कुछ मेटाडेटा शामिल हैं। आप यह देखने के लिए एक निकाल सकते हैं कि यह एक साथ कैसे है।)
relocations::relocation
इस मामले में उनके अधीन लाने - लाइनों, सिवाय इसके कि प्रत्येक मामले में वे भी निर्दिष्ट प्रतिस्थापन निर्भरता के वर्गों के लिए लागू होते हैं, इसी तरह के हैं org.elasticsearch.common
।
अंत में filters
अनुभाग लक्ष्य JAR से कुछ सामान को बाहर कर देता है जो इसमें नहीं होना चाहिए - जैसे कि JAR मेटाडेटा, चींटी बिल्ड फाइलें, पाठ फ़ाइलें आदि, जो कुछ निर्भरता के साथ पैक किए जाते हैं, लेकिन जो एक uber JAR से संबंधित नहीं हैं।
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<minimizeJar>true</minimizeJar>
<artifactSet>
<includes>
<include>com.google.guava:guava</include>
<include>net.sf.trove4j:trove4j</include>
<include>org.mvel:mvel2</include>
<include>com.fasterxml.jackson.core:jackson-core</include>
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-smile</include>
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-yaml</include>
<include>joda-time:joda-time</include>
<include>io.netty:netty</include>
<include>com.ning:compress-lzf</include>
</includes>
</artifactSet>
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>org.elasticsearch.common</shadedPattern>
</relocation>
<relocation>
<pattern>gnu.trove</pattern>
<shadedPattern>org.elasticsearch.common.trove</shadedPattern>
</relocation>
<relocation>
<pattern>jsr166y</pattern>
<shadedPattern>org.elasticsearch.common.util.concurrent.jsr166y</shadedPattern>
</relocation>
<relocation>
<pattern>jsr166e</pattern>
<shadedPattern>org.elasticsearch.common.util.concurrent.jsr166e</shadedPattern>
</relocation>
<relocation>
<pattern>org.mvel2</pattern>
<shadedPattern>org.elasticsearch.common.mvel2</shadedPattern>
</relocation>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>org.elasticsearch.common.jackson</shadedPattern>
</relocation>
<relocation>
<pattern>org.joda</pattern>
<shadedPattern>org.elasticsearch.common.joda</shadedPattern>
</relocation>
<relocation>
<pattern>org.jboss.netty</pattern>
<shadedPattern>org.elasticsearch.common.netty</shadedPattern>
</relocation>
<relocation>
<pattern>com.ning.compress</pattern>
<shadedPattern>org.elasticsearch.common.compress</shadedPattern>
</relocation>
</relocations>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/license/**</exclude>
<exclude>META-INF/*</exclude>
<exclude>META-INF/maven/**</exclude>
<exclude>LICENSE</exclude>
<exclude>NOTICE</exclude>
<exclude>/*.txt</exclude>
<exclude>build.properties</exclude>
</excludes>
</filter>
</filters>
</configuration>
</plugin>
</plugins>