Maven kurulumu ve Eclipse

Maven aracını, Visual Studio’nun Nuget Packet Manager i olarak tanımlayabiliriz. Bu sayede ihtiyaç duyulan kütüphaneler, eklentiler vs galerisinden indirilerek otomatik buil edilerek projenizde kullanılır hale getirilmektedir.

Maven’i şurdan(tıklayın) indirip dilediğiniz bir yere kurulum yapabilirsiniz. Kurulum denince öyle setup felan değil size verdiği sıkıştırılmış dosyayı çıkarın o kadar 🙂

Windows için;

“Denetim Masası\Sistem ve Güvenlik\Sistem” altında “Gelişmiş sistem ayarları -> Gelişmiş tabı -> Ortam Değişkenleri…” ne tıklayarak “PATH” için kurulum yaptığınız yeri eklemek gerekebilir. Bunu eklediğimizde hali hazırda komut satırından Maven’in kurulu olduğu dizine gitmeye gerek kalmamaktadır. Ayrıca Maven’in sorunsuz çalışabilmesi için “JAVA_HOME” ortam değişkeni(“C:\Program Files\Java\jdk1.7.0_17”) de tanımlı olursa ne âlâ.

Artık konsoldan maven çalıştırılabilir olacaktır.

Aşağıdakine benzer bir sonuç veriyor olması gerek.

HDbCM50

Maven ile eclipse’de örnek bir proje açacak olursak (Eclipse Luna Service Release 1 ile):

New ->  Other -> Maven klasörü altından Maven Project ya da New-> Maven Project  seçilerek devam edilir.

mvn1

Bir sonraki ekranda archetype adı verilen proje şekilleri var.  Burda “quickstart” olanı seçerek ilerleyebiliriz. Burdaki archetype mantığı önceden belirli tipte projeler için belirli bağımlılıklar, eklentiler vs projede hazır olarak gelmesini sağlayıp işleri kolaylaştırır.

 

mvn2

Sıra artık son aşamada burda da yapacağımız işin adını koyup finish diyoruz.

mvn3

Maven bizim için örnek bir hello world oluşturdu ve aşağıdaki şekilde yapıya sahip oldu.

mvn4

Burda dikkat çeken şeyler;

  1. Unit test için de bir şeyler oluşturması iyi mi kötü mü?
  2. Maven dependencies diye bir şey var o da ne ki?
  3. pom.xml neyin nesi?

Bunları sırayla açıklıycak olursak;

  1. Unit test için bir TestSuite oluşturuldu. Kullanan için iyi bir durum tabiki 😉 
  2. Maven dependencies, proje için gerekli kütüphaneler nelerdir, bunlar nerden alınmış vs gibi bilgileri tutar.
  3. pom xml; maven dependencies, plugin vs için konfigürasyon bilgilerini tutar

Örnek bir bağımlılık eklemek için;

mvn5

Mysql JDBC Connector’ü ekleyecek olursak (burdan) öğrenilen değerleri giriyoruz. Aslında girmeden search ederek de yapması gerek ama bende çalışmadı 🙂

mvn6

 

OK diyip pencereyi kapatıyoruz ve büyük ihtimal build automatically seçili olduğu için fazla sürmeden Maven dependencies altına eklendiğini göreceksiniz.

mvn7

 

Bunları sadece Maven’in yaptıklarının birkaçı olarak adlandırabiliriz. Daha fazla inceleme yapılabilir.

 Dip Not: Maven build edememesi durumunda  Eclipse’te “Windows -> Preferences -> Maven -> Installations” altına Maven’i kurduğunuz dizini ekleyip deneyebilirsiniz.

Java’da Serileştirme(Serialization)

Object Serialization(Nesneleri Serileştirme) kullanarak nesneler byte dizisi haline getirilebilir bu sayede nesneler program kapatıldığında dahi kalıcı olmuş olacaklardır. 

Serileştirilmiş nesnelerin  tekrar belleğe yüklenmesi için de Object Deserialization kullanılır. Deserialization işleminden sonra nesneler kullanılabilir halde olurlar.

 

Bu 2 işlem için gerekli olanlar :

  • Serializable Arayüzü(Interface) –> Bu arayüzü sağlayan(implements) sınıflar serileştirilebilir olduğunu söylemektedir.

  • ObjectOutputStream,FileOutputStream –> Bu sınıflar bir nesnenin serialization işleminde kullanılır. Nesnenin nereye yazılacağının bilgisini FileOutputStream ile belirlenir. ObjectOutputStream ise FileOutputStream sınıfının örneğini kullanarak nesneyi yazar.

  • ObjectInputStream,FileInputStream –> Bu sınıflar bir nesnenin deserialization işleminde kullanılır. Nesnenin nereden okunacağının bilgisini FileInputStream ile belirlenir. ObjectInputStream ise FileInputStream sınıfının örneğini kullanarak nesneyi okur.

Kullanılan Sınıflar :

  •  Yukarda tanımlanan Calisan sınıfı görüldüğü üzere Insan sınıfından türetilmiş ve Serializable olarak işaretlenmiştir. Burda önemli olan nokta Serializable arayüzünü gerçeklemiş olmasıdır. Buna ek olarak eğer bir sınıfın üst sınıfı Serializable arayüzünü gerçeklemişse ondan türetilen sınıflar da Serializable işlemine tâbi olabilirler.

  • serialVersionUID, yazdırılan nesnelerin versiyon kontrolünü sağlamak için kullanılır.Eklenmediği durumda Eclipse uyarı verir. “@SupressWarning(Serial)” ile derleyici bilgilendirilirse uyarı mesajı vermez.

 

Serileştirme İşlemi :

 Konsol Çıktısı :

  •  Bu örnekte ObjectOutputStream sınıfının WriteObject metodu kullanılarak nesneler teker teker yazdırıldı. Duruma göre daha farklı şekilde de yazdırılabilirdi (Örneğin bir List’i direkt olarak WriteObject e parametre olarak vermek gibi.).

  •  ObjectOutputStream sınıfının WriteInt(int) vs gibi de metodları bulunmakta gerektiğinde kullanılmalıdır.
  • Bir başka konu ise “transient” anahtar kelimesidir. Bu anahtar kelimeyle birlikte kullanılan üye alanlar serileştirilmez.

Dosyadan Okuma İşlemi : 

 

Konsol Çıktısı : 

 

  •  Okuma işlemlerinde dikkat edilmesi gereken nokta, okunan nesnenin serileştirilen nesne’nin tipine dönüştülmesi gerekebilir. Çünkü readObject() metodu object döndürmektedir cast(tip dönüşümü) işlemi ile rahatlıkla serileştirilmeden önce kullanılabilen üye alanlara ve metodlara da erişim sağlanır.