Fat jar oluşturmak için
1. maven-dependency-plugin ile dll dosyaları isim değiştirerek edilerek target dizinine taşınır
2. maven-resources-plugin ile diğer gerekli dosyalar target dizinine taşınır
3. maven-shade-plugin ile fat jar target dizininde oluşturulur
3.1 shade plugin için fat jar'a dahil edilmeyecek dosyalar configuration/filters/filter/exclude tag'i altında belirtilir.
3.2 Transformers kullanılarak mainClass ve diğer şeyler belirtilir.
4. maven-assembly-plugin ile target dizinindeki bu dosyalar ziplenir.
shade goal
Örnek - AWS Lambda
Şöyle yaparız. Burada projede başka bir dependency vs olmadığı için sadece fat jar üretiliyor.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.2</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
shadedPattern Kullanımı
shade plugin - relocation Kullanımı yazısına taşıdım
ManifestResourceTransformer Kullanımı
mainClass belirtilir
ServicesResourceTransformer Kullanımı
Örnek
Farklı transformer için şöyle yaparız. Burada ServicesResourceTransformer kullanılarak MANIFEST/services dosyaları birleştiriliyor.
<transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.grpc.hello.App</mainClass></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"></transformer></transformers>
Exclude Filter Kullanımı
Jar dosyalarının içindeki imza dosyalarını hariç bırakmak gerekiyor, yoksa java.lang.SecurityException fırlatılıyor.
Örnek
Şöyle yaparız. shadedArtifactAttached ne işe yarıyor bilmiyorum
<plugin><artifactId>maven-shade-plugin</artifactId><version>3.2.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/></transformers><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><shadedArtifactAttached>true</shadedArtifactAttached></configuration></execution></executions></plugin>
Örnek
Şöyle yaparız. Burada createDependencyReducedPom false verilerek dependency-reduced-pom.xml isimli dosyanın üretilmesi engelleniyor. Bu dosyada fat jar tarafından kullanılan ancak fat jar içinde olmayan dependency'ler yazılır. Örneğin bir projede bu dosyada lombok yazılıydı.
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.2</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration>
<createDependencyReducedPom>false</createDependencyReducedPom><transformers><transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.grpc.hello.App</mainClass></transformer></transformers><filters><filter><artifact>*.*<artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin>
Örnek
Şöyle yaparız. Burada farklı olarak manifestEntries tag'i altında Main sınıfı belirtiliyor.
artifactSet Kullanımı<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><manifestEntries><Main-Class>com.grpc.hello.App</Main-Class></manifestEntries></transformer></transformers><artifactSet /></configuration></execution></executions></plugin>
Örnek
Şöyle yaparız
<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>org.apache.commons:commons-lang3</include></includes></artifactSet><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>
Açıklaması şöyle
The above pom.xml creates an uber jar by including the commons-lang3 dependency, also it is excluding the unwanted files inside the META-INF and other folders as based on the configuration.
Hiç yorum yok:
Yorum Gönder