Son zamanlarda, elasticsearch'ün bağımlılıklarının birkaçını (tümünü değil) gölgelediğini ve yerini değiştirdiğini merak ettim. İşte projenin sorumlusu @kimchy'den bir açıklama :
Gölgeleme kısmı kasıtlıdır, elasticsearch'te kullandığımız gölgeli kütüphaneler elasticsearch'ün tüm niyet ve amaçlı kısmı içindir, kullanılan versiyon, elasticsearch'in ortaya koyduğu ve kütüphanenin nasıl çalıştığına (ve kütüphanenin nasıl çalıştığına bağlı olarak kütüphaneyi nasıl kullandığına) bağlıdır. sürümler arasındaki değişiklikler), netty ve guava harika örneklerdir.
Btw, aslında biri lucene gölgeli ve diğeri Lucene gölgeli birkaç kavanoz elasticsearch sağlamakla sorunum yok. Maven ile nasıl yapılacağından emin değilim. Örneğin netti / jackson'u gölgelemeyen bir sürüm sağlamak istemiyorum, çünkü elasticsearch onlarla birlikte olan derin sindirici kullanım nedeniyle aslında daha az bellek kullanmaya kıyasla daha fazla bellek kullanır).
- https://github.com/elasticsearch/elasticsearch/issues/2091#issuecomment-7156766
Ve burada drewr'dan bir tane daha :
Gölgeleme, bağımlılıklarımızı (özellikle netty, lucene, guava) kodumuza yakın tutmak için önemlidir, böylece yukarı akış sağlayıcısı geride kalsa bile bir sorunu düzeltebiliriz. Kodunuzun, özel sorununuza yardımcı olacak modülerleştirilmiş sürümlerini dağıtabiliriz (örneğin # 2091), ancak şu anda gölgeli bağımlılıkları kaldıramayız. Daha iyi bir çözüm olana kadar ES'nin yerel bir sürümünü amaçlarınız için oluşturabilirsiniz.
- https://github.com/elasticsearch/elasticsearch/pull/3244#issuecomment-20125452
Yani, bu bir kullanım örneğidir. Açıklayıcı bir örneğe gelince, aşağıda maven-shade-plugin elasticsearch pom.xml'de (v0.90.5) nasıl kullanılır. artifactSet::include
Uber JAR (temelde, bunlar fermuarını açıp ve hedef elasticsearch kavanoz üretildiği zaman elasticsearch kendi sınıflarının yanında yeniden paketlenmiş. (Zaten bunu bilmiyordum durumda içine çekmeye hangi bağımlılıklara bunun talimat çizgiler, bir JAR dosyası yalnızca programın sınıflarını, kaynaklarını vb. içeren bir ZIP dosyası ve bazı meta verileri içerir. Nasıl bir araya getirildiğini görmek için birini ayıklayabilirsiniz.)
relocations::relocation
Bu durumda, altına getirerek - satırları her durumda onlar da bağımlılık en sınıflara belirtilen değiştirmelerin geçerli olması dışında benzerdir org.elasticsearch.common
.
Son olarak filters
bölüm, JAR meta verileri, karınca oluşturma dosyaları, metin dosyaları vb. Gibi, orada bulunmaması gereken hedef JAR'dan bazı bağımlılıklar ile paketlenmiş ancak uber JAR'a ait olmayan bazı şeyleri hariç tutar.
<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>