Java Platform Modül Sistemi - Java Platform Module System

Java Platform Modülü Sistemi koleksiyonları için bir dağıtım biçimini belirtir Java kodu ve ilgili kaynakların. Ayrıca bu koleksiyonları veya modülleri depolamak için bir havuz belirtir ve bunların nasıl keşfedilebileceğini, yüklenebileceğini ve bütünlük açısından kontrol edilebileceğini tanımlar. Sınıf yolu ve sınıf yükleme sorunları gibi sorunlara yol açabilecek JAR Hell başta olmak üzere mevcut JAR formatındaki bazı eksiklikleri gidermek amacıyla ad alanları gibi özellikler içerir .

Java Modül Sistemi başlangıçta Java Topluluk Süreci kapsamında JSR 277 olarak geliştirildi ve Java 7 ile piyasaya sürülmesi planlandı.

JSR 277 daha sonra beklemeye alındı ​​ve JDK'yı modülerleştirmek için Project Jigsaw oluşturuldu. Bu JSR'nin yerini JSR 376 (Java Platform Modül Sistemi) almıştır.

Jigsaw Projesi başlangıçta Java 7 (2011) için tasarlanmıştı, ancak Plan B'nin bir parçası olarak Java 8'e (2014) ertelendi ve 2017'de tekrar Java 9 sürümüne ertelendi. Java Modül Sistemi dahil Java 9, 21 Eylül'de piyasaya sürüldü. 2017.

Mimari

Java 9'da uygulanan Java Modül Sistemi, aşağıdaki JEP'leri ve JSR'yi (Java Spesifikasyon İsteği) içerir :

  • JEP 200: Modüler JDK: JDK için modüler bir yapı tanımlayın
  • JEP 201: Modüler Kaynak Kodu: JDK kaynak kodunu modüller halinde yeniden düzenleyin, modülleri derlemek için yapı sistemini geliştirin ve yapı zamanında modül sınırlarını zorlayın
  • JEP 220: Modüler Çalışma Zamanı Görüntüleri: Modülleri barındırmak ve performans, güvenlik ve bakım kolaylığı sağlamak için JDK ve JRE çalışma zamanı görüntülerini yeniden yapılandırın
  • JEP 261: Modül Sistemi: Java Platform Modül Sistemini Uygulama
  • JEP 282: Java Bağlayıcı: Bir dizi modülü ve bunların bağımlılıklarını özel bir çalışma zamanı görüntüsünde birleştirebilen ve optimize edebilen bir araç oluşturun
  • JSR 376: Java Platform Modül Sistemi

Ek olarak, modül sistemine geçişi kolaylaştırmak için birkaç başka JDK 9 özelliği eklenmiştir:

  • JEP 238: Çoklu Yayın JAR Dosyaları: JAR dosya biçimini, sınıf dosyalarının birden çok, Java sürümüne özgü sürümünün tek bir arşivde bir arada bulunmasına izin verecek şekilde genişletin.
  • JEP 253: Modülerleştirme için JavaFX UI Kontrollerini ve CSS API'lerini Hazırlayın : JavaFX işlevleri için şu anda yalnızca dahili API'ler aracılığıyla kullanılabilen ve modülerleştirme nedeniyle erişilemez hale gelebilecek genel API'leri tanımlayın.
  • JEP 260: Çoğu Dahili API'yi Kapsülleyin: JDK'nın dahili API'lerinin çoğuna varsayılan olarak erişilemez hale getirin, ancak işlevlerinin tamamı veya çoğu için desteklenen değiştirmeler mevcut olana kadar birkaç kritik, yaygın olarak kullanılan dahili API'yi erişilebilir bırakın.
  • JEP 275: Modüler Java Uygulaması Paketleme: Java paketleyici , JDK 9 için gelişecek ve onu modüllerden haberdar ederek, örneğin bir modülü ve bağlı olduğu tüm modülleri paketlemesine olanak tanıyacaktır.

Modüllerin özellikleri

Modüller, kodu gruplandırmanın yeni bir yoludur. Jar dosyalarının aksine , modüller hangi modüllere bağımlı olduklarını ve hangi paketleri dışa aktardıklarını açıkça bildirir. Açık bağımlılık bildirimleri, büyük uygulamalar ve yazılım bileşenleri arasındaki bağımlılıklar hakkında akıl yürütmeyi kolaylaştırarak kodun bütünlüğünü iyileştirir.

Örneğin, aşağıdaki modül beyan modülü beyan com.foo.bar başka bağlıdır com.foo.baz : Aşağıdaki paketler modülü ve ihracat com.foo.bar.alpha ve com.foo.bar.beta :

module com.foo.bar {
    requires com.foo.baz;
    exports com.foo.bar.alpha;
    exports com.foo.bar.beta;
}

com.foo.bar.alpha ve com.foo.bar.beta paketlerinin genel üyelerine bağımlı modüller tarafından erişilebilir. 'Yasadışı erişime' fiili olarak izin verilip verilmeyeceği bir komut satırı ayarına bağlı olsa da, özel üyelere yansıma gibi bir yolla bile erişilemez .

Jar dosya formatının aksine, modül bu bağımlılıkları modülün kaynak dosya hiyerarşisinin kökünde module-info.java adlı bir dosyaya yerleştirilecek olan bir modül bildiriminde tanımlayacaktır . JDK, hem derleme zamanında hem de çalışma zamanında modüller arasındaki bağımlılıkları ve etkileşimleri doğrulayabilecektir. JDK'nın kendisi Java 9'da modüler hale getirilmiştir .

OSGi ile bağlantılar

Java Modül Sistemi, OSGi platformunun şu anda desteklediği tüm işlevleri (örneğin Yaşam Döngüsü modeli ve Hizmetler Kaydı) desteklemeyi amaçlamaz. Ancak Java Modül Sistemi, derleme zamanında modülerlik ve yerel kitaplıklar için yerleşik destek gibi OSGi tarafından desteklenmeyen işlevleri destekleyecektir. Java Modül Sistemi ve OSGi'nin nasıl birlikte çalışabileceğini araştıran birkaç makale 2016'da yayınlandı. Bunlar InfoQ'da ve ayrıca OSGi Alliance Blog'da bulunabilir.

Ayrıca bakınız

Referanslar

Dış bağlantılar