in Genel

Maven nedir ve neden kullanılır?

apache_maven

 

Bu yazıda Maven kurulumu veya kullanımı, JAR formatında çıktı alma veya JAR dosyalarıyla işlemler gibi pratiğe dayalı içerik bulunmuyor.  Yazının amacı Maven teknolojisini hiç bilmeyenlere ve yeni başlayanlara teorik olarak bu teknoloji hangi problemi nasıl çözer, neden ihtiyacımız vardır gibi sorulara cevap vermektir.

 

Maven kısaca bir bağımlılık yönetim aracıdır. Bu cümleyi ilk okuduğunuzda hiçbir şey anlamamanız gayet normal. Fakat bu yazının en sonuna gelindiğinde bu cümleyi anlamış olacağınızı düşünüyorum.
Maven’in ne olduğunu anlamaya başlamadan önce  JAR kavramını öğrenmemiz gerekiyor. JAR yani uzun haliyle Java Archive, Java için kullanabileceğimiz bir arşiv formatıdır. Dosya uzantısı yine adı gibi .jar’dır.

Tamam ama arşiv formatı nedir?
Kısaca Java projelerinin tek bir dosya şeklinde kullanılabilmesine olanak sağlayan bir formattır.
Yazdığımız Java uygulamalarını sadece kullandığımız IDE(Eclipse vs.) üzerinden derleyip çalıştırmak yerine, normal masaüstünden çift tık ile çalıştırılabilir bir program haline dönüştürmek istiyorsak JAR bizim için kullanılabilir bir arşiv formatıdır.
Birden fazla sınıftan oluşan (kütüphane-library) gibi projemizi tek bir dosya gibi alıp farklı projelere eklemek istediğimizde JAR bizim yardımımıza koşar. Örneğin; sık sık kullandığınız metotlar var. Bunları her seferinde sıfırdan yazmak istemiyorsunuz. Bir proje açıp bu metotları barındıran sınıfları yazarsınız. Ardından JAR formatında çıktı(export) olarak alırsınız. İstediğiniz zaman istediğiniz projeye ekleyerek(import) tekrar kullanılabilir bir hale getirmiş olursunuz.
Yani kısaca JAR, kodumuzu IDE’den bağımsız ve başka projelerde kullanılabilir hale getirmek için kullanacağımız bir araçtır.

JAR’ın ne olduğunu anladım da Maven diye geldik biz!
25566060
Java, 20 yaşını devirmiş bir programlama dilidir. Dolayısıyla bu güne kadar yazılımcılar pek çok problemle karşılaştılar. Bu problemlere çözümler ürettiler ve başka programcılarında bu çözümleri kullanmasını sağladılar. Örneğin; programlanabilir bir şekilde PDF formatında dosya üretme ihtiyacı hissedildi. Bu problem için bir kütüphane yazıldı. Daha sonra JAR formatında Java’nın açık kaynak felsefesine uygun olarak, başka yazılımcılarında kullanabilmesi için internet üzerinden paylaşıldı. Bu ve bunun gibi çözümler zaman içinde pek çok probleme yönelik çözümler üretti. Haliyle bir projede karşılaşılan her problem için çözüm olarak yeni bir kütüphane yani JAR dosyasını projeye dahil etmek gerekti. Şu anda üstünde çalıştığım projede 100+ JAR dosyası yani bağımlılık (dependency) bulunuyor. Bunları tek tek elle ekleyip çıkarmak yani yönetmek başlı başına bir iş. Bunun için ilgili kütüphanenin internet sitesine gidip, istenilen versiyon numarasına sahip JAR dosyasını indirmek ve proje içine yine elle koymak gerekiyor. Gördüğünüz gibi bir de bunun yanında her kütüphanenin versiyon numaralarına dikkat etmek gerekiyor. Basit ve otomatize edilebilir bir iş için ne kadar çok vakit kaybediliyor değil mi?
İşte Maven’in temelde görevi;  projenin bağımlı olduğu kütüphaneleri sizin yerine otomatik olarak projeye dahil etmektir.

Peki bunu nasıl yapıyor?
Maven için kütüphaneler veya bir diğer deyişle tekrar kullanılabilir yazılımsal çözümler yani JAR dosyaları birer bağımlılık(dependency) olarak adlandırılır. Maven, bağımlılıkları kendi deposunda tutan bir sisteme sahiptir. İstediğiniz bağımlılığı mvnrepository.com adresine gidip, arama kutusuna bağımlılık ismini yazarak bulabilirsiniz.
Örneğin; Spring Core kütüphanesini projemize dahil edebilmek için aşağıdaki XML kodunu pom.xml dosyamıza eklememiz gerekiyor.

Pom.xml dosyası Maven’in ayar dosyasıdır. Bu dosya üzerinden projemizin yönetimini sağlayabiliyoruz. Kısaca etiketlere değinmek gerekirse;
<dependency> : Bir bağımlılık temsil eder. İçerisinde bağımlılığa ait özellikleri barındırır.
<groupId> : Bağımlılığın hangi organizasyona ait olduğunu ifade eder. Burada org.springframework aslında birçok kütüphane barındıran bir organizasyondur. Java dünyasında groupId genellikle projenin web adresi ile alakalıdır. Eğer projenizin web adresi “blogprojem.com” ise groupId “com.blogprojem” olabilir. Bu bir şart değil, sadece genel bir yazılı olmayan kuraldır. Örneğin; şu adresten bu organizasyonun alt kütüphanelerini görebilirsin.
<artifactId> : Belirtilen organizasyon içinde hangi kütüphanenin getirileceğini ifade eder. Örneğin; şu adresten spring-core kütüphanesinin sürümlerini görebilirsin.
<version> : Anlaşılacağı üzere hangi versiyonun getirileceğini ifade eder.

Son

Yani sözün özüne gelirsek, başta da belirttiğim üzere; Maven kısaca bir bağımlılık yönetim aracıdır. Yazıda Maven kurulumu veya adım adım kullanımı gibi şeyleri anlatmadım. Bunun yerine tam olarak mantığı nedir, neden kullanılır, hangi probleme çözüm üretir gibi soruları cevaplamaya çalıştım. Elbette Maven’in bize sunduğu tek imkan bu değildir. Bağımlılık yönetiminin yanında modüler bazda proje geliştirme imkanı, plugin desteğiyle proje yönetimini daha güçlü kılma ve benzeri imkanlar da sunar. Daha detaylı bilgi için Maven’in resmi sitesini ziyaret edebilirsiniz.

Yorum yaz

Comment

  1. Merhaba Ahmet,
    Beğendiğine sevindim. Böyle yorumlar almak insanı sevindiriyor ve motive ediyor.
    Bende bahsettiğin şekilde bir sorun olduğunu düşünüyorum. Bu yazıya benzer birkaç yazı daha yazmayı düşünüyorum.
    Teşekkürler, iyi çalışmalar.