Maven Nedir? Maven ne işe yarar? — Maven komutları

Ubeyde Akgül
Huawei Developers - Türkiye
6 min readMay 3, 2021

--

Selamlar 👋🏻

Bu yazımda, birçok projede kulanılan ve geliştiricilerin çoğunun bir şekilde duyduğu Maven hakkında temel bilgilerden bahsedeceğim.

Neden Maven Kullanmalıyız ?

Maven gibi bağımlılık(dependency) yönetim araçları yokken, veya kullanılmadığında, geliştiriciler projelerine başka bir framework ya da kütüphaneyi eklemek istediğinde, o kütüphanenin JAR dosyalarını manuel olarak bulup indirip kendi projelerine eklemeleri gerekiyordu. (Bu kütüphane sizin projenizin bağımlılığı-dependency oluyor)

Kullanılan dependency sayısı arttıkça ve projenin farklı cihazlarda — farklı ide lerle geliştirilmek istendiğinde, her cihazda ve ide üzerinde tüm bu bağımlılıkların jar dosyalarını tekrar eklemek gerekiyor ve durum iyice zorlaşıyor. 😩

Bu durum, kontrol edilemezliği dışında, çok gereksiz bir efor ve zaman kaybına sebep oluyor. Daha da kötüsü, kütüphanelerden birisi güncelleme aldığında/değiştirilerek farklı versiyon kullanıldığında herşey iyice içinden çıkılmaz hale geliyor. 😰

İşte Maven burada devreye giriyor ve tüm bunları sizin için otomatik bi şekilde gerçekleştiriyor. Üstelik bu eklenilen bağımlılıkların bağımlı olduğu başka dependencyler varsa onları da projeye dahil ediyor. Mükemmel 👊🏻💥

Özetle, aşağıdaki durumları yaşadığınız bir projeniz, geliştirme süreciniz varsa Maven kullanmalısınız;

  1. Bağımlılıklarınız fazla ise, veya bağımlılıkları yönetmekte zorlanıyorsanız,
  2. Bağımlılıklarınız çok sık güncelleniyorsa,
  3. CI / CD ve Testing işlemlerini-süreçlerini uygulamayı düşünüyorsanız
  4. Kod dokümantasyonunu, kaynak kodunu, ZIP olarak veya JAR olarak vb arşivlemeyi düşünüyorsanız

Maven Nedir ?

Apache Maven kısaca, çıkış noktası build işlemlerini sadeleştirmek olan bir build otomasyon aracıdır.

Diğer bir deyişle, proje oluşturma, raporlama ve belgeleri yönetme işlevlerini kolaylaştıran bir yazılım projesi yönetimi ve anlama aracıdır.

Başka bir deyişle, proje geliştirirken kütüphane bağımlılığını ve IDE bağımlılığını ortadan kaldırmamızı, geliştirme sürecini basitleştirmemizi, dokümantasyonumuzu etkili bir şekilde oluşturmamızı ve bir standart oluşturmamızı sağlayan bir araçtır.

Yapıları, belgeleri, raporları, bağımlılıkları, yazılım yapılandırmalarını, sürümleri ve dağıtımları yönetmeye yardımcı olur. Çoğu IDE Maven için eklenti sağlar.

Maven başlıca/genelde Java projeleri için kullanılsa da C#, Ruby, Scala gibi farklı diller için de kullanılabilir.

Ek olarak Yidiş dilinde “Bilginin Birikimi” anlamına da geliyormuş. 🌟

Maven’in Amaçları Nelerdir — Maven Ne İşe Yarar ?

  • Projenin geliştirme adımlarını kolaylaştırmak
  • Standartlaştırma
  • Projenin niteliklerini bilgi olarak sağlamak
  • Tekrar kullanılabilirlik
  • Kararlılık
  • Bağımlılık yönetimi
  • Ölçeklenebilirlik
  • Build işlemini kolaylaştırmak
  • Sabit bir build sistemi sağlamak
  • Kaliteli proje bilgisi sağlamak
  • En iyi uygulamayı geliştirmek için kurallar sağlamak
  • Yeni özelliklere geçişi kolaylaştırmak

Maven Nasıl Çalışır :

Maven, kütüphane dosyalarını kendi Central Maven Repository sunucularında barındırır.

Projede kullanılmak istenilen kütüphane dosyalarını ( pom.xml de belirtilen ) ilk olarak local repository klasöründe arar. Eğer bulamazsa kendi sunucularında arama yapar. Eğer kendi sunularında da bulamazsa tanımlayacağınız bir sunucu adresi üzerinden dosyayı local klasörünüze indirir ve proje içerisinde kullanılabilmesini sağlar.

Ayrıca bir kütüphane başka kütüphanelere bağımlıysa bu bağımlı olduğu kütüphaneleri de indirir ve projenize ekler.

Projede kullanılacak tüm kütüphaneler ve eklentiler (Bağımlı kaynaklar) Maven’ın temel iş birimi olan POM ( Poject Object Model ) dosyasından kolayca yönetilebilmektedir.

Yani konfigrasyon için projedeki pom.xml dosyası kullanılır ve Build ya da Deploy yapılandırmaları POM dosyasından yönetililir.

POM dosyası proje dokümantasyonu da içerebilmektedir. Yani proje hakkında bilgi edinmek için sadece bu dosyaya bakmak yeterli olacaktır.

maven lifecyle by packt

Maven Nasıl Kurulur :

Maven kurulumu yapabilmek için ilk olarak ihtiyacınız olacak şey tabiki JDK(Java Development Kit).

Eğer JDK ‘e sahip olup olmadığınızı bilmiyorsanız, komut satırına java –version yazarak öğrenebilirsiniz.

Ortam Değişkenleri (system environment ) içerisinde JAVA_HOME olduğundan emin olmalıyız. Bilmeyenler için; How to set java_home on windows

Güncel Maven sürümünü indirerek ve bu zip dosyasını yerel disk C ‘nin altına çıkartalım.(C:\apache-maven-3.3.3 gibi)

Ortam Değişkenlerinde yeni bir değişken oluşturalım ve adına M2_HOME diyelim ve değerine de Maven ‘i çıkardığımız dizini verelim ve kaydedelim. (Örnek olarak C:\apache-maven-3.3.3\)

Ardından Path değişkenini seçelim ve düzenlemeye basalım. Değer kısmının sonunda noktalı virgül yoksa ekleyelim ve sonuna da %M2_HOME%\bin; ekleyelim. Ardından kaydedelim.

Ekleyeceğimiz tüm değişkenler Sistem Değişkenleri kısmında olacak, üst kısma ( user veriables ) eklemiyoruz.

Her şey doğru gitmişse komut satırında mvn –version yazdığınızda karşınıza version bilgisi gelecektir ve kurulum tamamlanmış olacaktır.

Görsel referanslı kurulum gösterimi isteyenler için : install maven by mkyong , install maven by journaldev

Maven Nasıl Kullanılır ? Maven Projesi Nasıl Oluşturulur?

Her Maven projesinin bir GroupId ‘si, bir ArtifactId ‘si ve bir de sürüm numarası vardır. Projenin farklı sürümlerini saklayabilir ve bunları daha sonra yeni projelerde kullanabiliriz

Proje oluşturulurken bizden GroupId ve ArtifactId girmemiz isteniyor. GroupId ‘i girerken dikkate almanız gereken birkaç durum var. GroupId, Projenin ait olduğu proje grubunu (com.examplecode) ve proje adını (samplewebapp) içermelidir. ArtifactId ise projenin ana parçasının adını içermelidir yani projenin kendisi bu yüzden proje adını giriyoruz.

Maven ilk olarak ayar dosyasını (config file — pom.xml) okur. Gerekli olan bağımlılıkları yerel depoda (yerel önbellek) arar.

  • Windows için %homepath%\.m2 klasöründe.
  • Linux için $HOME/.m2 klasöründe

Dosyalar uzak depoda varsa yerel depoya indirilir ve projeye dahil edilir.

POM.xml deki her bir tag ‘ın bir işlevi vardır, kısaca açıklamak gerekirse:

  • Project : Maven ‘in hangi versiyonları ve ayarları kullanacağını belirtir ve kök elemandır.
  • Model Version : Maven versiyonunu belirtir.
  • Packaging : Projemizin paketleme türünü belirtir. EAR, WAR, JAR gibi değerler alabilir.
  • Name : Projemizin adını belirtir.
  • Url : Projemizi paylaşmak istediğimizde veya sunucuya göndermek istediğimizde buraya yazacağımız adrese gönderilir.
  • Dependency : Projemizde kullanacağımız her bir kütüphane bir dependency yani bağımlılıktır. Her bir bağımlılığın bir proje çıktısı olduğunu varsayarsak sanırım içerisindeki groupId, artifactId ve version ‘un ne anlama geldiğini anlatmış olurum. Burada bilinmeyen tek tag, scope ‘dir.
  • Scope : Bir bağımlılığın projenin hangi yapılandırmasında kullanılacağını belirtir. Test, Debug, Run gibi değerler alabilir. Yazılması zorunlu değildir, sadece her yapılandırma sırasında kullanılmasını sağlamış oluruz.
  • Build : Projemizin yapılandırma ayarlarını ve kullanacağımız eklentileri tanımlayabileceğimiz kısımdır.

Maven Repository adresinden istediğiniz tüm dependencyleri bulabilir ve POM dosyanıza — gradle dostanıza vs nasıl dahil ekleyeceğinizi ve projeye nasıl dahil edeceğinize ulaşabilirsiniz. Örn: Tüm spring freamwork maven dependencyleri.

Örn : Spring Security Core için aşağıdaki maven dependency Pom.xml ‘e ekleyerek projenize Spring Security Core kütüphanesinin sağladıklarını projede kullanabilirsiniz.

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.4.2</version>
</dependency>
maven phases & goals by hopinfirst

Maven komutları :

  • mvn validate: Projenin target dosyasını siler ve daha sonra hatalı kısımları tarayarak Projenin doğruluğunu kontrol eder.
  • mvn compile: Projeyi clean ve validate eder ardından Kaynak kodu derler.
  • mvn test: Derlenmiş koda uygun bir unit test ile test eder.
  • mvn package: Projeyi testlerini yapar ve eğer hata yoksa projeyi paketler. jar dosyasını oluşturur.
  • mvn verify: Entegrasyon teslerinin sonuçlarını kontrol ederek kalite kriterine ulaşıldığından emin olur.
  • mvn install: Diğer projelerde dependency olarak kullanmak için paketleri local depoya yükler.
  • mvn deploy: Projeyi uygulama sunucusuna yükler.
  • mvn clean : Projenin derlenmesi sırasında oluşan target klasörünün(build işlemi sonucunda üretilen) silinmesini sağlar.
  • mvn pre-clean: Temizlik öncesi gerekli olan prosesleri çalıştırır
  • mvn post-clean: Temizlik işlemini bitirmek için gerekli olan prosesleri çalıştırır
  • mvn pre-site: Site oluşturma öncesi gerekli olan prosesleri çalıştırır
  • mvn site: Projenin site dökümantasyonunu oluşturur
  • mvn post-site: Site oluşturma işlemini bitirmek için gerekli olan prosesleri çalıştırır
  • mvn site-deploy: Üretilen siteyi belirtilen web sunucusuna yerleştirir
build gif by tenor

--

--