Maven Projelerini Tek Bir Yürütülebilir JAR'da Paketleme
Java projeleriyle çalışırken, kolay dağıtım için genellikle uygulamanızı tek bir yürütülebilir JAR dosyası halinde paketlemeniz gerekir. Güçlü bir yapı otomasyon aracı olan Maven, geliştiricilerin gerekli tüm bağımlılıkları bu tek çıkış JAR'ına dahil etmelerine olanak tanır.
Bu makale, Maven projenizi tüm bağımlılık JAR'larını son yürütülebilir JAR'ınıza dahil edecek şekilde yapılandırmak için gereken adımlarda size yol gösterecektir. Bu talimatları izleyerek dağıtım sürecini basitleştirecek ve uygulamanızın farklı ortamlarda sorunsuz bir şekilde çalışmasını sağlayacaksınız.
Emretmek | Tanım |
---|---|
<plugin> | Derleme işlemi sırasında kullanılacak bir Maven eklentisini tanımlar. Eklentiler, kod derlemek veya projeyi paketlemek gibi belirli görevleri yürütebilir. |
<groupId> | Maven projesi için genellikle ters etki alanı adı olan grup tanımlayıcısını belirtir. |
<artifactId> | Projenin adı olan yapının tanımlayıcısını tanımlar. |
<version> | Projenin mevcut sürümünü belirtir. |
<build> | Eklentiler ve kaynaklar da dahil olmak üzere projenin yapı yapılandırmasını içerir. |
<descriptorRef> | Maven Derleme Eklentisinin kullanması için "bağımlılıklara sahip kavanoz" gibi önceden tanımlanmış bir tanımlayıcıya başvurur. |
<mainClass> | JAR dosyası çalıştırıldığında yürütülecek ana sınıfı belirtir. |
<execution> | Farklı derleme aşamalarında gerçekleştirilecek görevleri belirten bir eklenti içindeki yürütme bloğunu tanımlar. |
mvn clean package | Projeyi temizleme ve tüm bağımlılıklar dahil bir JAR dosyasına paketleme komutu. |
java -jar target/...jar | JAR'ın yolunu belirterek oluşturulan JAR dosyasını çalıştırma komutu. |
Maven ile Yürütülebilir JAR Oluşturma ve Çalıştırma
Yukarıda verilen komut dosyaları, bir Maven projesinin tüm bağımlılıklarını tek bir yürütülebilir JAR dosyasında paketleyecek şekilde nasıl yapılandırılacağını gösterir. İlk senaryo bir Maven'dir pom.xml Projenin yapılandırmasını içeren dosya. Bu dosyanın içerisinde <plugin> etiketi Maven Assembly Eklentisini tanımlamak için kullanılır. Bu eklenti, tüm bağımlılıkları içeren yürütülebilir bir JAR oluşturmak için çok önemlidir. <descriptorRefs> eklenti yapılandırmasındaki etiket, eklentinin kullanımını belirtir. jar-with-dependencies projenin tüm bağımlılıklarının son JAR dosyasında paketlenmesini sağlayan tanımlayıcı. <mainClass> içindeki etiketi <manifest> bölümü, Maven'e JAR çalıştırıldığında hangi sınıfın çalıştırılacak ana yöntemi içerdiğini bildirdiği için önemlidir.
<execution> eklenti yapılandırmasının içindeki blok, eylemin gerçekleştiği yerdir. Eklentinin amacını belirtir single sırasında yürütülmelidir. package yapı yaşam döngüsünün aşaması. Bağımlılıklarla JAR dosyasının oluşturulmasını tetikleyen şey budur. İkinci komut dosyası basit bir komut satırı talimatıdır: mvn clean package. Bu komut projeyi temizler (önceki derleme yapıtlarını kaldırarak), kaynak kodunu derler, testleri çalıştırır ve projeyi bir JAR dosyasına paketler. Son JAR dosyası şu konumda yer alacaktır: target Projenin dizini ve buna göre adlandırılmış artifactId Ve version belirtilen pom.xml.
Maven Kullanarak Bağımlılıklara Sahip Yürütülebilir JAR Dosyası Oluşturma
Maven Yapılandırma Komut Dosyası
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
JAR'ı Paketlemek için Maven Komutunu Çalıştırma
Komut Satırı Talimatları
mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included
Paketleme Bağımlılıkları için Gelişmiş Maven Teknikleri
Maven ile yürütülebilir bir JAR oluşturmaya yönelik temel yapılandırmanın ötesinde, oluşturma sürecinizi geliştirebilecek ek teknikler vardır. Böyle bir teknik, aşağıdakilerin kullanılmasını içerir: shade eklenti yerine assembly Eklenti. Maven Shade Eklentisi, uber-JAR'lar (bağımlılıkları içeren JAR'lar) oluşturmak için daha gelişmiş özellikler sunar. Sınıf yolu çakışmalarını önlemek için paketleri yeniden adlandırmanıza olanak tanır ve yinelenen sınıflar ve kaynaklar için daha iyi işlem sağlar. Ek olarak, son JAR'a hangi bağımlılıkların dahil edileceği konusunda ayrıntılı kontrol sunar.
Bir diğer önemli husus da JAR dosyanızın boyutunu yönetmektir. Büyük JAR dosyalarının aktarılması veya yüklenmesi hantal ve yavaş olabilir. maven-shade-plugin Gereksiz dosyaları ve sınıfları hariç tutmanıza ve böylece son JAR'ın boyutunu azaltmanıza olanak tanıyarak bu konuda yardımcı olabilir. Eklentiyi, kullanılmayan sınıflar veya gereksiz kaynaklar gibi gerekli olmayan bilgileri kaldırarak JAR'ı en aza indirecek şekilde de yapılandırabilirsiniz. Bu gelişmiş yapılandırmalar, çok sayıda bağımlılığa sahip büyük projeler üzerinde çalışırken özellikle yararlı olabilir.
Maven Çalıştırılabilir JAR'ları için Yaygın Sorular ve Çözümler
- JAR'ımda ana sınıfı nasıl belirlerim?
- Ana sınıfı kullanarak belirtebilirsiniz. <mainClass> içindeki etiket <manifest> Maven eklenti yapılandırmasının bölümü.
- Belirli bağımlılıkları son JAR'dan nasıl hariç tutabilirim?
- Kullan excludes Son JAR'a dahil edilmemesi gereken bağımlılıkları belirtmek için eklenti yapılandırmasındaki etiketi kullanın.
- uber-JAR nedir?
- uber-JAR, yalnızca derlenmiş kodunuzu değil aynı zamanda tüm bağımlılıklarını da içeren bir JAR dosyasıdır.
- JAR'ımda sınıf yolu çakışmalarını nasıl önleyebilirim?
- maven-shade-plugin Çakışmaları önlemek için bağımlılıklar içindeki paketleri yeniden adlandırmanıza olanak tanır.
- Bağımlılıklardaki yinelenen sınıfları nasıl ele alabilirim?
- Yapılandır maven-shade-plugin kopyaların son JAR'da nasıl ele alınması gerektiğini belirterek yinelenen sınıfları ve kaynakları yönetmek.
- Bir bağımlılıktan yalnızca belirli dosyaları ekleyebilir miyim?
- Evet, yapılandırabilirsiniz maven-assembly-plugin veya maven-shade-plugin bir bağımlılıktan yalnızca belirli dosyaları dahil etmek için.
- Paketlenmiş JAR'ı nasıl çalıştırırım?
- Kullan java -jar komutunu ve ardından JAR dosyanızın yolunu takip edin.
- JAR dosyamın içeriğini nasıl doğrulayabilirim?
- Şunu kullanabilirsiniz: jar -tf JAR dosyasının içeriğini listeleme komutu.
- JAR dosyam çok büyükse ne olur?
- Kullan maven-shade-plugin gereksiz dosyaları hariç tutmak ve JAR boyutunu en aza indirmek için.
Maven Çalıştırılabilir JAR'ları Hakkında Son Düşünceler
Maven kullanarak bağımlılıklara sahip yürütülebilir bir JAR oluşturmak, Java uygulamaları için dağıtım sürecini basitleştirir. Doğru şekilde yapılandırarak pom.xml geliştiriciler, Maven Assembly Plugin veya Maven Shade Plugin gibi eklentileri kullanarak gerekli tüm bağımlılıkları tek bir JAR dosyasında paketleyebilir. Bu yaklaşım, uygulamanın çeşitli ortamlarda sorunsuz bir şekilde çalışabilmesini sağlayarak dağıtım ve yürütmeyi basitleştirir. Bu adımları takip etmek projenizin bağımlılıklarını etkili bir şekilde yönetmenize ve güvenilir, yürütülebilir JAR dosyaları oluşturmanıza yardımcı olacaktır.