Maven Nedir, Nasıl Kullanılır?

Merhaba arkadaşlar, bu yazımda size yakın zamanda kullanmaya başladığım oldukça faydalı ve kullanımı basit bir aracı anlatacağım. Maven, Ant ‘a bir alternatif olarak gösterilen aynı Ant gibi bir JDT(Java Development Tool) ‘dur. Ant ‘ın projeyle ilgili üst düzey bilgileri içermemesi ve kullanımı için oldukça uzun kodlar yazmayı gerektirmesi gibi nedenlerden dolayı Maven geliştirildi. Kısacası Maven ile Ant ‘ın yapabileceği her şey yapılabilir.

Ne işe yarar bu Maven?

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

Maven ‘in faydalarını inceleyelim,

Kurulumda esneklik, Maven proje kalıpları sayesinde IDE bağımlılığı yoktur. Yeni bir proje oluşturacağınızda Maven proje kalıpları kullanabilirsiniz, bu kalıplar birer standart haline geldiği için tüm IDE ‘lerde desteklenmektedir.

Bağımlı kaynaklar, projede kullanılacak tüm kütüphaneler ve eklentiler POM(Project Object Model) dosyasından kolayca yönetilebilmektedir. Maven, kütüphane dosyalarını kendi repository sunucularında barındırır. Projede kullanmak istediğiniz kütüphane dosyalarını ilk olarak sizin local repository klasörünüzde arar, eğer bulamazsa kendi sunucularında arama yapar, eğer kendi sunularında da bulamazsa sizin tanımlayacağınız bir sunucu adresinden dosyayı sizin local klasörünüze indirir ve projeniz içerisinde kullanabilmenizi 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.

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

Proje yapılandırma yönetimi, projenizin build ya da deploy yapılandırmalarını POM dosyasından yönetebilirsiniz. Sadece birkaç satır kodla bu yapılandırmalar arasında geçişler yapabilirsiniz. Mesela büyük çaplı bir proje, farklı sunucu sistemlerinde ya da farklı veri tabanlarında eş zamanlı olarak çalışması gerekebilir. Bunun için her güncelleme sırasında farklı yapılandırma ayarlarıyla bu sistemleri güncellememiz gerekir. Her sistem için yapılandırma dosyalarını baştan düzenlemek oldukça yorucu bir iş. Ancak POM dosyasında tanımlanacak yapılandırma ayarları işimizi görecektir. Sadece yapılandırma adını değiştirerek proje çıktısını farklı sistemlere uygun hale getirebilmekteyiz.

Sürüm yönetimi, her Maven projesinin bir grup id ‘si, bir yapı id ‘si ve bir de sürüm numarası vardır. Projenin farklı sürümlerini saklayabilir ve bunları daha sonra yeni projelerde kullanabiliriz.

Peki, nasıl kurarız bu Maven ‘i?

Maven kurulumu yapabilmek için ilk olarak ihtiyacınız olacak şey elbette JDK(Java Development Kit) ‘dır. Eğer JDK ‘e sahip olup olmadığınızı bilmiyorsanız, komut satırına java –version yazarak öğrenebilirsiniz.

Eğer JDK kurulu değilse http://www.oracle.com/technetwork/java/javase/downloads/index.html adresinden güncel JDK sürümünü kurabilirsiniz. Önemli bir nokta olarak Ortam Değişkenlerinde JAVA_HOME olduğundan emin olun.

Evet, şimdi sırada http://maven.apache.org/download.cgi adresinden güncel Maven sürümünü indirelim ve bu zip dosyasını Yerel disk C ‘nin altına çıkaralım.(C:\apache-maven-3.3.3 gibi)

Sırada birkaç ortam değişkeni eklemek var. Ortam değişkenlerine erişmek için Bilgisayarım ‘a sağ tıklayıp özellik diyoruz. Daha sonra Gelişmiş Sistem Ayarlarına tıklıyoruz.

1

Açılan pencerede Gelişmiş sekmesinin altından Ortam Değişkenlerine tıklıyoruz. Daha önce de söylediğim gibi Sistem Değişkenleri kısmında JAVA_HOME ‘un bulunması gerekmekte, özel bir durum oluşmadığı sürece JDK kurulumu sırasında bu otomatik olarak ekleniyor.

2

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

İlk olarak 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. (Örnek olarak C:\apache-maven-3.3.3\) Daha sonra kaydedelim.

3

Şimdi Path değişkenini seçelim ve düzenlemeye basalım.

4

Daha sonra değer kısmının sonunda noktalı virgül yoksa ekleyelim ve sonuna da %M2_HOME%\bin; ekleyelim. Son olarak da tamam diyerek değişlikleri kaydedelim.

5

Eğer her şey doğru gitmişse komut satırında mvn –version yazdığınızda karşınıza böyle bir şey gelecektir ve kurulum tamamlanmış olacaktır.

6

Maven ile basit bir örnek yapalım

Şimdi hemen basit bir proje oluşturarak nasıl kullanacağımızı görelim. Ben IDE olarak Intellij kullanacağım. Kurulum yapmak isteyenler https://www.jetbrains.com/idea/download/ adresinden indirebilir. Daha öncesinde Eclipse ‘de çalışıyordum ancak deneme şansı elde ederseniz ne kadar gelişmiş olduğunu görebilirsiniz. Tek dezavantajı ücretli olması, ancak 30 günlük deneme süresi var ve tabi ki biz sevgili öğrencileri de mutlu etmek için öğrenci mail adresiyle 1 yıllık lisans ücretsiz olarak veriliyor.

7

İlk olarak yeni bir web application projesi oluşturalım ve Maven ‘ı seçerek, sağ taraftan Maven kalıbını seçelim ve İleri diyelim.

8

Burada bizden GroupId ve ArtifactId girmemiz isteniyor. GroupId ‘i girerken dikkate almanız gereken birkaç durum var. GroupId, Projenin ait olduğu proje grubunu (com.kurukod) ve proje adını (ornekwebapp) içermelidir. ArtifactId ise projenin ana parçasının adını içermelidir yani projenin kendisi bu yüzden proje adını giriyoruz. Sonraki yazılarda Maven yardımıyla bir projeyi parçalar halinde geliştirerek bunları birleştirmeyi göreceğiz. Ancak bu sizin isteğinize bırakılmış bir şey, yani projeniz tek bir parçadan da oluşabilir. Evet, şimdi ileri diyelim ve sonraki sayfada hangi maven sürümünü kullanacağımızı seçelim. Intellij içerisinde gömülü bir Maven var. Peki neden onu kullanmıyoruz? Çünkü Maven ayarlarında (kurulum klasörünün içindeki settings.xml) değişiklik yapmamız gerekebilir ve birden fazla IDE ile çalışıyorsak tek bir Maven klasörüyle çalışmamız daha iyi olacaktır. Şimdi kurduğumuz Maven ‘i seçerek ileri diyelim. Eğer kurduğunuz Maven klasörünü burada göremiyorsanız sağdaki … butonundan ekleyebilirsiniz.

9

Şimdi de proje adını girelim ve projemizi oluşturalım.

10

Projemiz oluşturulduğunda kalıp indirilerek proje dizin yapısı oluşturulur. POM dosyamıza bakalım.

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kurukod.ornekwebapp</groupId>
<artifactId>ornekwebapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ornekwebapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>ornekwebapp</finalName>
</build>
</project>

Her bir tag ‘ın bir işlevi vardır, bunları 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.

Ek bir bilgi olarak, projemizde özel kütüphaneler kullanmak isteyebilir ve bunları paylaşmak istemeyebiliriz. Bu durumda proje içerisine bu kütüphane dosyalarını ekler ve bunları POM dosyasında tanıtabiliriz, örneğin:

<dependency>
<groupid>javax.sql</groupid>
<artifactid>rowset</artifactid>
<version>1.0.1</version>
<scope>system</scope>
<systempath>${basedir}/lib/rowset.jar</systempath>
</dependency>

Burada ${basedir}, POM dosyasının bulunduğu dizini belirtir. Yani kök dizindir.

Maven komutları

  • clean: Projenin derlenmesi sırasında oluşan target klasörünün silinmesini sağlar.
  • Validate: Projenin target dosyasını siler ve daha sonra hatalı kısımları tarar.
  • Compile: Projeyi clean ve validate eder, daha sonra derler.
  • Test: Projeyi derler ve test sınıflarını çalıştırır.
  • Package: Projeyi testlerini yapar ve eğer hata yoksa projeyi paketler.
  • Verify: Projeyi paketler ve daha sonra bu paketlerin geçerliliğini kontrol eder.
  • İnstall: Projeyi doğruladıktan sonra repository sunucusuna yükler.
  • Deploy: Projeyi uygulama sunucusuna gönderir.

11

Komutlar şekilden de anlaşılacağı üzere birbiri içerisine gömülmüştür. Yani örnekle, deploy komutunu çalıştırmak tüm komutların sırasıyla çalışmasını sağlar. Bu komutları, komut penceresinden yazabilirsiniz. Modülleme gibi konuları vaktim oldukça açıklamaya çalışacağım.

EOC(End Of Code)