Maven Komutları ve Seçenekleri: Kapsamlı Bir Hızlı Başvuru Kılavuzu (Cheat Sheet)
Maven, Java projeleri için güçlü bir proje yönetim ve anlama aracıdır. Proje yaşam döngüsünün derleme, raporlama ve dokümantasyon gibi temel yönlerini yönetmek için standart bir yol sağlar. Bağımlılık yönetiminden, projenin temizlenmesine, test edilmesine ve dağıtılmasına kadar birçok aşamada geliştiricilerin hayatını kolaylaştırır. Bu kapsamlı “cheat sheet” makale, Maven ile günlük çalışmalarınızda en sık kullanacağınız komutları ve seçenekleri detaylandırarak, hızlı ve etkin bir şekilde projelerinizi yönetmenize yardımcı olmayı amaçlamaktadır.
Maven’ın gücü, belirgin bir proje yapısı ve yaşam döngüsü modeli üzerine kuruludur. Her komut, bu yaşam döngüsünün belirli bir aşamasını veya bir eklentinin (plugin) belirli bir hedefini (goal) temsil eder. Bu makalede, temel derleme komutlarından, bağımlılık yönetimine, proje bilgisi sorgulamadan, gelişmiş seçeneklere kadar geniş bir yelpazede 20’den fazla Maven komutunu ve seçeneğini ele alacağız.
Maven Temel Kavramları
Maven komutlarını anlamadan önce, Maven’ın nasıl çalıştığını belirleyen birkaç temel kavramı hatırlamak faydalı olacaktır.
Maven Yaşam Döngüsü (Lifecycle)
Maven, bir projenin derlenmesi ve dağıtılması için standart bir yaşam döngüsü tanımlar. Bu yaşam döngüsü, ardışık aşamalardan (phases) oluşur. Bir aşamayı çalıştırdığınızda, o aşamadan önceki tüm aşamalar da sırayla çalıştırılır. En yaygın yaşam döngüleri şunlardır:
* clean: Projenin target dizinini ve önceki derlemelerden kalan tüm dosyaları temizler.
* default (veya build): Projeyi derlemek ve dağıtmak için ana yaşam döngüsüdür. İçerdiği bazı önemli aşamalar:
* validate: Projenin doğru ve gerekli tüm bilgileri içerdiğini doğrular.
* compile: Projenin kaynak kodlarını derler.
* test: Derlenmiş kaynak kodlarını uygun bir birim test çerçevesi (örn. JUnit) kullanarak test eder. Testler başarısız olursa derleme durur.
* package: Derlenmiş kodu alıp JAR, WAR veya EAR gibi dağıtılabilir bir formatta paketler.
* verify: Entegrasyon testlerinin sonuçlarını kontrol eder, kalite kontrol kontrolleri yapar.
* install: Paketlenmiş artifact’i (JAR/WAR vb.) yerel Maven deposuna (local repository) yükler. Bu, diğer yerel projelerin bu artifact’e bağımlılık olarak erişmesini sağlar.
* deploy: Paketlenmiş artifact’i uzak bir depoya (remote repository) kopyalar. Bu genellikle şirket içi bir Maven deposudur (örn. Nexus, Artifactory).
* site: Projenin dokümantasyonunu ve raporlarını oluşturur.
Hedefler (Goals)
Yaşam döngüsü aşamaları, aslında bir veya daha fazla eklentinin (plugin) belirli hedeflerine (goals) bağlanır. Örneğin, compile aşaması maven-compiler-plugin‘in compile hedefine bağlanmıştır. mvn clean install gibi bir komut çalıştırdığınızda, Maven clean yaşam döngüsünü tamamen çalıştırır, ardından default yaşam döngüsünün install aşamasına kadar olan tüm aşamalarını sırayla çalıştırır.
POM.xml (Project Object Model)
pom.xml dosyası, Maven’ın kalbidir. Projenin yapılandırmasını, bağımlılıklarını, eklentilerini, derleme ayarlarını ve diğer tüm proje bilgilerini XML formatında tanımlar. Maven, tüm işlemlerini bu dosyadaki bilgilere göre gerçekleştirir.
Şimdi, en sık kullanılan Maven komutlarına ve seçeneklerine geçelim.
I. Temel Yapılandırma ve Derleme Komutları
Bu komutlar, bir Maven projesinin derleme yaşam döngüsünün temel aşamalarını yönetmek için kullanılır.
1. mvn clean
* Açıklama: Projenin target dizinini ve önceki derlemelerden kalan tüm dosyaları temizler. Genellikle yeni bir derlemeye başlamadan önce kullanılır, böylece eski çıktılardan kaynaklanan sorunlar önlenir.
* Kullanım: mvn clean
2. mvn compile
* Açıklama: Projenin ana kaynak kodlarını (src/main/java) derler ve target/classes dizinine yerleştirir.
* Kullanım: mvn compile
3. mvn test
* Açıklama: Derlenmiş ana kaynak kodlarını ve test kaynak kodlarını (src/test/java) derler, ardından birim testlerini çalıştırır. Testler başarısız olursa derleme durur.
* Kullanım: mvn test
* Örnek: Belirli bir testi çalıştırmak için: mvn test -Dtest=MyTestClass
* Örnek: Testleri atlamak için: mvn test -DskipTests veya mvn test -Dmaven.test.skip=true (derleme ve paketleme sırasında test derlemesini de atlar)
4. mvn package
* Açıklama: Projeyi derler, testleri çalıştırır ve kodu target dizininde bir JAR, WAR veya EAR dosyası gibi dağıtılabilir bir formatta paketler.
* Kullanım: mvn package
5. mvn install
* Açıklama: Projeyi derler, testleri çalıştırır, paketler ve oluşturulan artifact’i (JAR/WAR vb.) yerel Maven deponuza (~/.m2/repository) yükler. Bu, diğer yerel projelerin bu artifact’e bağımlılık olarak erişmesini sağlar.
* Kullanım: mvn install
6. mvn deploy
* Açıklama: Projeyi derler, testleri çalıştırır, paketler, yerel depoya yükler ve son olarak oluşturulan artifact’i uzak bir depoya (örn. Nexus, Artifactory) kopyalar. Genellikle CI/CD ortamlarında kullanılır.
* Kullanım: mvn deploy
7. mvn verify
* Açıklama: package aşamasına kadar tüm aşamaları çalıştırır ve ardından entegrasyon testlerinin sonuçlarını kontrol eder. Bu aşama genellikle entegrasyon testleri için kullanılır.
* Kullanım: mvn verify
8. mvn clean install
* Açıklama: Önce target dizinini temizler, ardından projenin tamamını derler, test eder, paketler ve yerel depoya yükler. En sık kullanılan komutlardan biridir.
* Kullanım: mvn clean install
9. mvn clean deploy
* Açıklama: Önce target dizinini temizler, ardından projenin tamamını derler, test eder, paketler, yerel depoya yükler ve uzak depoya dağıtır.
* Kullanım: mvn clean deploy
II. Bağımlılık Yönetimi Komutları
Maven’ın en güçlü özelliklerinden biri bağımlılık yönetimidir. Bu komutlar, projenizin bağımlılıklarını anlamanıza ve yönetmenize yardımcı olur.
10. mvn dependency:tree
* Açıklama: Projenin bağımlılık ağacını hiyerarşik bir formatta görüntüler. Bu, transitif bağımlılıkları ve potansiyel bağımlılık çakışmalarını (conflict) belirlemek için çok faydalıdır.
* Kullanım: mvn dependency:tree
* Örnek: Belirli bir bağımlılığı filtrelemek için: mvn dependency:tree -Dincludes=groupId:artifactId
11. mvn dependency:resolve
* Açıklama: Projenin tüm bağımlılıklarını çözümlemeye ve yerel depoya indirmeye çalışır. Bu komut, bağımlılıkların doğru bir şekilde yapılandırılıp yapılandırılmadığını kontrol etmek için kullanılabilir.
* Kullanım: mvn dependency:resolve
12. mvn dependency:analyze
* Açıklama: Kullanılmayan (unused) veya bildirilmemiş ancak kullanılan (undeclared but used) bağımlılıkları belirleyerek pom.xml dosyanızı optimize etmenize yardımcı olur.
* Kullanım: mvn dependency:analyze
13. mvn dependency:purge-local-repository
* Açıklama: Belirli bir bağımlılığı veya tüm bağımlılıkları yerel depodan siler ve yeniden indirilmesini sağlar. Bağımlılıklarla ilgili sorunlar yaşandığında (bozuk indirmeler vb.) faydalıdır.
* Kullanım: mvn dependency:purge-local-repository
* Örnek: Sadece belirli bir bağımlılığı temizlemek için: mvn dependency:purge-local-repository -DactTransitively=false -Dinclude=groupId:artifactId
III. Proje Bilgileri ve Raporlama Komutları
Bu komutlar, projenizin mevcut durumu, yapılandırması ve çeşitli raporlar hakkında bilgi sağlar.
14. mvn help:effective-pom
* Açıklama: Mevcut proje için geçerli olan nihai POM’u (Project Object Model) görüntüler. Bu, üst POM’lardan (parent POMs), profillerden ve varsayılan ayarlardan devralınan tüm bilgileri içerir. Projenizin nihai yapılandırmasını anlamak için çok önemlidir.
* Kullanım: mvn help:effective-pom
* Örnek: Çıktıyı bir dosyaya kaydetmek için: mvn help:effective-pom > effective-pom.xml
15. mvn help:active-profiles
* Açıklama: Mevcut derleme sırasında etkin olan tüm Maven profillerini listeler.
* Kullanım: mvn help:active-profiles
16. mvn help:describe
* Açıklama: Bir eklentiyi veya hedefi detaylı olarak açıklar. Parametreleri ve varsayılan değerleri hakkında bilgi sağlar.
* Kullanım: mvn help:describe -Dplugin=compiler -Dgoal=compile -Ddetail
* Örnek: Tüm eklentileri listelemek için: mvn help:describe -Dplugin=compiler -Dfull
17. mvn versions:display-dependency-updates
* Açıklama: Projenizin bağımlılıkları için daha yeni versiyonların olup olmadığını kontrol eder ve listeler. versions-maven-plugin tarafından sağlanır.
* Kullanım: mvn versions:display-dependency-updates
18. mvn versions:display-plugin-updates
* Açıklama: Projenizin eklentileri için daha yeni versiyonların olup olmadığını kontrol eder ve listeler.
* Kullanım: mvn versions:display-plugin-updates
19. mvn site
* Açıklama: Projenin dokümantasyonunu ve raporlarını oluşturur. Oluşturulan site, target/site dizininde bulunur ve genellikle projenin genel bakışını, Javadoc’unu, test raporlarını ve bağımlılık bilgilerini içerir.
* Kullanım: mvn site
* Örnek: Oluşturulan siteyi tarayıcıda görmek için: mvn site:run (genellikle http://localhost:8080 adresinde çalışır)
IV. Gelişmiş ve Yardımcı Komutlar
Bu komutlar, belirli senaryolarda veya daha spesifik görevler için kullanılır.
20. mvn archetype:generate
* Açıklama: Yeni bir Maven projesi oluşturmak için kullanılır. Bir “archetype” (şablon), projenin başlangıç yapısını, pom.xml dosyasını ve örnek dosyaları sağlar.
* Kullanım: mvn archetype:generate (interaktif modda bir archetype seçmenizi ister)
* Örnek: Hızlı bir web uygulaması iskeleti oluşturmak için: mvn archetype:generate -DgroupId=com.mycompany -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
21. mvn spring-boot:run
* Açıklama: Spring Boot tabanlı bir uygulamayı doğrudan Maven üzerinden çalıştırır. spring-boot-maven-plugin tarafından sağlanır.
* Kullanım: mvn spring-boot:run
22. mvn jetty:run
* Açıklama: Bir web uygulamasını Jetty sunucusu üzerinde çalıştırır. jetty-maven-plugin tarafından sağlanır.
* Kullanım: mvn jetty:run
23. mvn release:prepare ve mvn release:perform
* Açıklama: maven-release-plugin tarafından sağlanan bu komutlar, projenin sürümünü yönetmek için kullanılır. prepare yeni bir sürüm etiketler, perform ise etiketlenen sürümü derler ve dağıtır. Genellikle CI/CD boru hatlarında otomasyon için kullanılır.
* Kullanım: mvn release:prepare
* Kullanım: mvn release:perform
V. Sık Kullanılan Genel Seçenekler (Flags)
Bu seçenekler, herhangi bir Maven komutuyla birlikte kullanılabilir ve Maven’ın davranışını etkiler.
24. -D=
* Açıklama: Maven’a veya eklentilere bir sistem özelliği (property) tanımlamak için kullanılır. Çok yaygın bir seçenektir.
* Kullanım: mvn install -DskipTests (testleri atlar)
* Kullanım: mvn package -Dmaven.compiler.source=11 -Dmaven.compiler.target=11 (derleyici Java versiyonunu ayarlar)
* Kullanım: mvn install -DmyCustomProperty=myValue
25. -P
* Açıklama: pom.xml veya settings.xml dosyasında tanımlanan belirli bir Maven profilini etkinleştirmek için kullanılır. Profiller, farklı derleme ortamları (dev, test, prod) veya farklı davranışlar için yapılandırmaları özelleştirmeye olanak tanır.
* Kullanım: mvn install -Pdev (geliştirme profilini etkinleştirir)
26. -U veya --update-snapshots
* Açıklama: Uzak depolardan snapshot bağımlılıklarının ve eklentilerin en yeni versiyonlarını indirmeye zorlar. Genellikle bağımlılık güncellemeleri veya CI/CD ortamlarında kullanılır.
* Kullanım: mvn clean install -U
27. -o veya --offline
* Açıklama: Maven’ı çevrimdışı modda çalıştırır. Uzak depolardan bağımlılık indirmeye çalışmaz, sadece yerel depoda bulunan bağımlılıkları kullanır. İnternet bağlantısı olmayan durumlarda veya derleme süresini hızlandırmak için faydalıdır.
* Kullanım: mvn clean install -o
28. -N veya --non-recursive
* Açıklama: Çok modüllü bir projede, sadece kök modülü derler ve alt modülleri atlar.
* Kullanım: mvn clean install -N
29. -fn veya --fail-never
* Açıklama: Bir modül başarısız olsa bile derlemeye devam eder. Bu, tüm projeyi derlemeye çalışırken tek bir modüldeki hatayı görmezden gelmek istediğinizde faydalı olabilir.
* Kullanım: mvn clean install -fn
30. -B veya --batch-mode
* Açıklama: Maven’ı etkileşimli olmayan (non-interactive) modda çalıştırır. Kullanıcı girdisi istemez ve daha az detaylı çıktı üretir. CI/CD ortamları için idealdir.
* Kullanım: mvn clean install -B
31. -X veya --debug
* Açıklama: Hata ayıklama modunu etkinleştirir ve çok detaylı bir çıktı üretir. Maven derlemesiyle ilgili sorunları gidermek için paha biçilmezdir.
* Kullanım: mvn clean install -X
32. -e veya --errors
* Açıklama: Sadece hataların tam yığın izini (stack trace) gösterir. -X kadar detaylı değildir ancak hata mesajlarını daha anlaşılır hale getirir.
* Kullanım: mvn clean install -e
33. -s veya --settings
* Açıklama: Varsayılan settings.xml (~/.m2/settings.xml) dosyası yerine özel bir settings.xml dosyası belirtir.
* Kullanım: mvn clean install -s my-custom-settings.xml
34. -gs veya --global-settings
* Açıklama: Varsayılan global settings.xml ($M2_HOME/conf/settings.xml) dosyası yerine özel bir global settings.xml dosyası belirtir.
35. -r veya --resume-from
* Açıklama: Çok modüllü bir projede, daha önce başarısız olan bir modülden derlemeye devam etmek için kullanılır.
* Kullanım: mvn install -r module-b (module-b’den başlayarak derlemeye devam eder)
36. -pl veya --projects
* Açıklama: Çok modüllü bir projede, sadece belirli modülleri derler.
* Kullanım: mvn install -pl module-a,module-b
37. -am veya --also-make
* Açıklama: -pl ile birlikte kullanılır. Belirtilen modüllerin yanı sıra, bu modüllerin bağımlı olduğu diğer modülleri de derler.
* Kullanım: mvn install -pl module-c -am (module-c’yi ve module-c’nin bağımlı olduğu tüm modülleri derler)
38. -rf veya --resume-from
* Açıklama: -pl ve -am ile benzer şekilde, belirli bir modülden başlayarak derlemeye devam etmek için kullanılır, ancak daha çok başarısız olan bir modülden sonra kullanılır.
* Kullanım: mvn install -rf module-b (module-b’den başlayarak tüm bağımlılıkları ile birlikte derler)
Sonuç
Maven, Java ekosisteminde proje yönetiminin vazgeçilmez bir aracıdır. Bu kapsamlı komut ve seçenekler cheat sheet’i, günlük geliştirme süreçlerinizde size rehberlik etmek üzere tasarlanmıştır. Maven’ın yaşam döngüsünü, hedeflerini ve eklentilerini anlayarak, projelerinizi daha verimli bir şekilde yönetebilir, bağımlılık sorunlarını çözebilir ve otomatikleştirilmiş derleme süreçleri oluşturabilirsiniz.
Unutmayın ki Maven’ın gücü, esnek yapılandırma ve geniş eklenti ekosisteminden gelir. Bu listedeki komutlar, başlangıç noktasıdır. Her bir komut ve eklenti için daha fazla seçenek ve yapılandırma mevcuttur. Daha derinlemesine bilgi için her zaman Maven’ın resmi dokümantasyonuna başvurmanız önerilir. Bu kılavuzun, Maven yolculuğunuzda size yardımcı olacak hızlı ve pratik bir başvuru kaynağı olmasını umuyoruz.
