Java Modülleri Sistemi: Yardım, bağımlılıklarım Java modülleri değil!

Portakalkafa

Global Mod
Global Mod
Önceki bir yazıda, Java Modülleri Sistemi (Java Platform Modülleri Sistemi, JPMS) ve ona ulaşmanıza nasıl yardımcı olacağına dair minimum destek yazdım. Artık kitapçıların Java modülleri sistemini desteklemediği her zaman gerçekleşebilir ve gelecekte en azından “otomatik modüller” olarak mevcut olacakları da tahmin edilemez.








Hendrik Advers (@hendrikebbers), JCP uzman grubunun bir üyesi olan Java'nın şampiyonu ve farklı Javaone rock yıldızı hoparlörleri aldı. Kendi açık unsurları şirketi ile Hendrik şu anda Hedera Hashgraph'ı tasarlamaya ve hizmetlerini halka açık hale getirmeye yardımcı oluyor. Hendrik aynı zamanda Juug Dortmund ve Cyberland tarafından ve tüm dünyada Java teması hakkında dersler ve seminerler düzenliyor. “Mastering JavaFx 8 Controls” adlı kitabı 2014 yılında Oracle Press tarafından yayınlandı. Hendrik, TSC Emptopenjdk ve Eclipse WG benimseyenlerin bir üyesidir.







Kodunuzu JPMS'ye geçmek ve bu kitapçılara bağımlı olmak istiyorsanız, makyaj kutusuna ulaşmalısınız. Bu yazıda tam olarak bu bağımlılıklara girmek ve bununla nasıl başa çıkacağımı görmek istiyorum.

Çözüm olarak derece eklentisi


Maven'de daha fazla evimde hissetmeme rağmen, son zamanlarda Java modülleriyle büyük ölçüde projenin geçişi üzerinde çalıştım. Proje açık kaynak olduğundan, GitHub'da görülebilir. Bu projede, yenilemenin başında Java modülleri sistemini desteklemeyen çeşitli bağımlılıklar vardı. Bazıları için doğrudan projeleri için Pull (PR) talepleri oluşturarak sürdürülebilir bir çözüm elde edebildik. Automatic-Module-Name Eklemek için. Bunu, konuyla ilgili bir önceki yazıda bir Maven eklentisi veya derecesi ile nasıl başaracağımı zaten açıkladım. Bu PR'nin bir örneği burada bulunabilir.

Şimdi, böyle bir PR'yi kolayca yerleştiremeyeceğiniz veya PR'nin kabul edilmediği bağımlılıklar da var. Belki de daha fazla gelişme askıya alınan bir bağımlılığınız var. Tüm bu durumlarda, farklı bir uygulama gereklidir. Temel olarak, bağımlılık java modülleri oluşturmak için dikkatli olmanız gerekir. Bunun için birkaç seçenek var. Örneğin, birini yönetebilir Automatic-Module-Name-Ad Sesi kavanozun manifestosuna ekleyin ve daha sonra bir dahili depo maveninde değiştirilmiş versiyonu barındırın. Bahsedilen Standart Proje için Jendrik Johannes tarafından Java Info “eklentisi kullandık. Açık kaynak olarak mevcut olan bu eklenti, yapı zamanında bir tane almanızı sağlar Automatic-Module-Name Bağımlılıklara kaydı ekleyin. Özellikle, eklenti aşağıdaki örnekte olduğu gibi, her biri automaticModule(…) İkinci parametreler teslim edildiğinde kullanılacak formun ilk parametresi ve adı olarak bağımlılık derecesi tanımlayıcısını çağırın:


plugins {
id("org.gradlex.extra-java-module-info")
}

extraJavaModuleInfo {
failOnMissingModuleInfo.set(true)

automaticModule("io.prometheus:simpleclient",
"io.prometheus.simpleclient")
automaticModule("io.prometheus:simpleclient_common",
"io.prometheus.simpleclient_common")
automaticModule("io.prometheus:simpleclient_httpserver",
"io.prometheus.simpleclient.httpserver")
}



Eklentinin yazarı ile birlikte, çok üretken bir değişimle önemli ölçüde genişleyebildik. Otomatik modüllere ek olarak, eklenti her zaman bir modül olmuştur. module-info.java yaratmak. Ancak burada ihracat gibi ihracatların tanımlanması gerekiyordu. Yeni özelliklerle artık tam paketleri dışa aktarılacak şekilde bir modül tanımlayabilirsiniz (daha fazla bilgiye bakın). Bu, bazı özel özelliklerin bana getirdiği otomatik modüllerle çalışmak zorunda olmadığınız büyük bir avantaja sahiptir, çünkü diğer şeylerin yanı sıra, bir formun tüm otomatik “istekleri” otomatik modülleri, “istenen” olarak otomatik bir modül eklenmez eklenir eklenir module-info.java Verilmiştir (bkz. Java spesifikasyonu). Ayrıca bu durumda Jendrik Johannes'a kütüphane olarak büyük bir teşekkür. Bence işbirliğimiz açık kaynağın avantajlarını çok iyi göstermiştir. Buraya daha da derinlere girmek isteyenler için Jendrik, bu konuda birkaç videoya ve YouTube'daki Grace'deki diğer konulara ücretsiz olarak ev sahipliği yaptı.

Bir sorun olmaya devam ediyor


Bununla birlikte, burada sunulan uygulama ile son ciddi bir sorun çözülemez: Bir kavanoz, Java modül sisteminin paketinin bölüm kısıtlamalarını ihlal etmez, Modulepath'a eklenemez. Bu durumda, difüzyon fazından önemli ölçüde alınmalıdır. Bu noktada gelecekteki bir katkıyı geçeceğim.


(RME)
 
Üst