18 Ağustos 2021

Java Platform Modular System (JPMS) 2

ile gökhan

Bir önceki yazımızda JPMS hakkında genel bir giriş yapmıştık. Bu yazımızda bir module yapısını oluşturmamızı sağlayan module-info.java dosyasında diğer modüllerle etkileşimini nasıl konfigure edeceğimizi konuşacağız.

Aşağıdaki gibi 4 modülden oluşan bir yapı oluşturalım:

com.gkhn.gorev modülüne bakalım. Kalın oklar (exports) com.gkhn.gorev modülündeki bazı paketlerin com.gkhn.yonetim ve com.gkhn.kullanici modülündeki paketleri için gerekli olduğunu ifade ediyor. Bu yüzden modüllerin kullanabilmesi için exports ifadesi ile ilgili sınıfları dışarı açıyoruz. İnce oklar(requires) ise diğer modüllerin com.gkhn.gorev modülü için gerekli olduğunu ifade etmekte. Bu yüzden requires ifadesini kullanarak bu gerekliliği berlirtiyoruz.

module com.gkhn.gorev{
	exports com.gkhn.gorev.temel;
  	exports com.gkhn.gorev.islemler;
    exports com.gkhn.gorev.ozel;
    requires com.gkhn.yonetim;
    requires com.gkhn.kullanici;
    requires com.gkhn.temel;
}

Bir paketi bütün modüllere değil de sadece belirli bir modüle açmak için exports ifadesi aşağıdaki gibi düzenlenmelidir.

module com.gkhn.gorev{
	exports com.gkhn.gorev.temel to com.gkhn.kullanici;
}

Şimdi aşağıdaki örneğe bakalım. gorev modülü, hem kullanıcı modülüne hem de yonetim modülüne bağımlığı var. Bunun için gorev modülünde kullanıcı ve yonetim modülünün gerekli olduğunu modül dosyasında bildirmek gerekecek. Ancak aşağıdaki şekil incelendiğinde hali hazırda zaten kullanıcı modülü yönetim modülüne bağımlı. Bu yüzden uzun uzadıya görev modülünde tüm bağımlılıkları yazmak yerine requires transive anahtar kelimesi kullanılarak aşağıdaki gibi ifade edilebilir. Böylece yonetim modülünün bağlılığını ifade etmeye gerek kalmadı. Kullanıcı modülü yonetim modül bağlılığını içerdiği için requires transive anahtar kelimesi ile kullanıcı modülünü göstermek işimizi çözecektir.

module com.gkhn.gorev{
	requires com.gkhn.kullanici; //gerek yok. 
    requires com.gkhn.yonetim;  //gerek yok.
    requires transive com.gkhn.kullanici
}