Java Platform modul rendszer - Java Platform Module System
A Java platform modulrendszer megadja a Java kód és a kapcsolódó erőforrások gyűjteményeinek terjesztési formátumát . Ezenkívül meghatároz egy tárhelyet ezeknek a gyűjteményeknek vagy moduloknak a tárolására , valamint meghatározza, hogyan lehet őket felfedezni, betölteni és integritását ellenőrizni. Olyan funkciókat tartalmaz, mint például a névterek, amelyek célja a meglévő JAR formátum néhány hiányosságának kijavítása , különösen a JAR Hell , amelyek olyan kérdésekhez vezethetnek, mint az osztályút és az osztályterhelés.
A Java modulrendszert eredetileg a Java közösségi folyamat alatt fejlesztették ki JSR 277 néven, és a tervek szerint a Java 7-es verzióval jelent meg.
Később a JSR 277-et felfüggesztették, és létrehozták a Project Jigsaw-t, hogy modulálják a JDK-t. Ezt a JSR-t a JSR 376 (Java Platform Module System) váltotta fel.
A Jigsaw projektet eredetileg a Java 7 (2011) programnak szánták, de a B terv részeként a Java 8 (2014) programra halasztották, majd 2017-ben ismét egy Java 9 kiadásra halasztották . A Java 9 és a Java modulrendszer szeptember 21-én jelent meg, 2017.
Építészet
A Java 9-ben megvalósított Java modulrendszer a következő JEP-eket és JSR-t (Java specifikációs kérelem) tartalmazza :
- JEP 200: A moduláris JDK: Adjon meg egy moduláris struktúrát a JDK számára
- JEP 201: Moduláris forráskód: Szervezze át a JDK forráskódot modulokká, fejlessze az összeállítási rendszert a modulok fordításához, és érvényesítse a modulhatárokat építéskor
- JEP 220: Moduláris futásidejű képek: Szerelje át a JDK és a JRE futásidejű képeket a modulok befogadására, a teljesítmény, a biztonság és a karbantarthatóság javítására
- JEP 261: Modulrendszer: A Java Platform modulrendszer megvalósítása
- JEP 282: A Java Linker: Hozzon létre egy eszközt, amely összeállíthatja és optimalizálhatja a modulok készletét és azok függőségeit egy egyedi futási idejű képpé
- JSR 376: Java platform modul rendszer
Ezenkívül számos más JDK 9 funkcióval bővült a modulrendszerre való áttérés megkönnyítése érdekében:
- JEP 238: Több kiadású JAR-fájlok: Bővítse ki a JAR fájlformátumot, hogy az osztályfájlok több, Java-kiadás-specifikus verziója együtt lehessen létezni egyetlen archívumban.
- JEP 253: JavaFX felhasználói felület vezérlők és CSS API-k előkészítése a modulációhoz: Olyan Java API-k meghatározása a JavaFX-funkcionalitásokhoz, amelyek jelenleg csak belső API-kon keresztül érhetők el, és a moduláció miatt elérhetetlenné válnának.
- JEP 260: A legtöbb belső API beágyazása: A JDK belső API-jainak nagy részét alapértelmezés szerint elérhetetlenné teszi, de néhány kritikus, széles körben használt belső API-t elérhetővé tesz, amíg támogatott helyettesítők nem léteznek funkcionalitásuk egészére vagy nagy részére.
- JEP 275: Moduláris Java alkalmazáscsomagolás: A Java csomagoló a JDK 9 számára fejleszteni fog, tudatában lesz a moduloknak, lehetővé téve például egy modul és az összes függő modul csomagolását.
A modulok tulajdonságai
A modulok a kódolás új módja. A Jar fájlokkal ellentétben a modulok kifejezetten deklarálják, hogy mely moduloktól függenek, és milyen csomagokat exportálnak. A kifejezett függőségi deklarációk javítják a kód integritását, megkönnyítve a nagy alkalmazások és a szoftverkomponensek közötti függőségek megalapozottságát.
Például a következő modul nyilatkozat kijelenti, hogy a modul com.foo.bar függ egy másik com.foo.baz modul és az export a következő csomagokat: com.foo.bar.alpha és com.foo.bar.beta :
module com.foo.bar {
requires com.foo.baz;
exports com.foo.bar.alpha;
exports com.foo.bar.beta;
}
A com.foo.bar.alpha és a com.foo.bar.beta csomagok nyilvános tagjai függő modulok által lesznek elérhetőek. A magántagok még a reflexióval sem érhetők el , bár az, hogy az „illegális hozzáférés” de facto megengedett-e, a parancssori beállításoktól függ.
A Jar fájlformátummal ellentétben a modul leírja ezeket a függőségeket egy moduldeklarációban , amely a modul forrás-fájl hierarchiájának gyökerébe a module-info.java nevű fájlba kerül. A JDK képes lesz ellenőrizni a modulok közötti függőségeket és kölcsönhatásokat mind fordítási, mind futási időben. Magát a JDK-t modulálták a Java 9-ben .
Kapcsolatok az OSGi-vel
A Java modulrendszer nem kívánja támogatni az OSGi platform által jelenleg támogatott összes funkciót (például az életciklus modellt és a szolgáltatási nyilvántartást). A Java modulrendszer azonban támogatni fogja azokat a funkciókat, amelyeket az OSGi nem támogat, mint például a modulárisság a fordítás idején, és a natív könyvtárak beépített támogatása. Néhány cikk arról szólt, hogy a Java Module System és az OSGi hogyan működhet együtt 2016-ban. Ezek megtalálhatók az InfoQ oldalon és az OSGi Alliance blogon is.