Java-alustamoduulijärjestelmä - Java Platform Module System

Java Platform Module System määrittää jakelu muoto kokoelmia Java -koodin ja siihen liittyvät resurssit. Siinä määritetään myös arkisto näiden kokoelmien tai moduulien tallentamiseen ja tunnistetaan, kuinka ne voidaan löytää, ladata ja tarkistaa eheyden suhteen. Se sisältää ominaisuuksia, kuten nimitiloja, joiden tarkoituksena on korjata joitain nykyisen JAR- muodon puutteita , erityisesti JAR Hell , mikä voi johtaa esimerkiksi luokkatie- ja luokan latausongelmiin.

Java-moduulijärjestelmää kehitettiin alun perin Java-yhteisöprosessissa nimellä JSR 277, ja sen oli tarkoitus julkaista Java 7: n kanssa.

JSR 277 myöhemmin pidätettiin ja Project Jigsaw luotiin moduloimaan JDK. JSR 376 (Java Platform Module System) korvasi tämän JSR: n.

Project Jigsaw oli alun perin tarkoitettu Java 7: lle (2011), mutta se siirrettiin Java 8: een (2014) osana B-suunnitelmaa ja jälleen kerran Java 9 -julkaisuun vuonna 2017. Java 9 ja Java-moduulijärjestelmä julkaistiin 21. syyskuuta, 2017.

Arkkitehtuuri

Java 9: ​​ssä toteutettu Java-moduulijärjestelmä sisältää seuraavat JEP: t ja JSR: n (Java-määrityspyyntö) :

  • JEP 200: Modulaarinen JDK: Määritä modulaarinen rakenne JDK: lle
  • JEP 201: Modulaarinen lähdekoodi: Järjestä JDK-lähdekoodi uudelleen moduuleiksi, tehosta koontijärjestelmää moduulien kääntämiseksi ja pakota moduulirajat rakennushetkellä
  • JEP 220: Modulaariset ajonaikaiset kuvat: Järjestele JDK- ja JRE-ajoaikakuvat moduulien mukauttamiseksi ja suorituskyvyn, turvallisuuden ja ylläpidettävyyden parantamiseksi
  • JEP 261: Moduulijärjestelmä: Ota käyttöön Java-alustan moduulijärjestelmä
  • JEP 282: Java Linker: Luo työkalu, joka voi koota ja optimoida joukon moduuleja ja niiden riippuvuuksia mukautetuksi ajonaikaiseksi kuvaksi
  • JSR 376: Java-alustamoduulijärjestelmä

Lisäksi moduulijärjestelmään siirtymisen helpottamiseksi on lisätty useita muita JDK 9 -ominaisuuksia:

  • JEP 238: Usean julkaisun JAR-tiedostot: Laajenna JAR-tiedostomuotoa, jotta luokkatiedostojen useat Java-julkaisukohtaiset versiot voivat olla rinnakkain yhdessä arkistossa.
  • JEP 253: Valmistele JavaFX- käyttöliittymäohjaimet ja CSS-sovellusliittymät modulaatiota varten: Määritä julkiset sovellusliittymät JavaFX-toiminnoille, jotka ovat tällä hetkellä saatavissa vain sisäisten sovellusliittymien kautta ja joihin ei olisi pääsyä modulaation vuoksi.
  • JEP 260: Kapseloi useimmat sisäiset sovellusliittymät: Tee useimmista JDK: n sisäisistä sovellusliittymistä oletusarvoisesti käyttämätön, mutta jätä muutama kriittinen, laajalti käytetty sisäinen sovellusliittymä saataville, kunnes tuetut korvaavat tuotteet ovat olemassa kaikilla tai suurimmalla osalla niiden toiminnoista.
  • JEP 275: Modulaarinen Java-sovelluspakkaus: Java- pakettia kehitetään JDK 9: lle, jolloin se on tietoinen moduuleista, mikä mahdollistaa esimerkiksi moduulin ja kaikkien siitä riippuvien moduulien pakkaamisen.

Moduulien ominaisuudet

Moduulit ovat uusi tapa koodata ryhmiä. Toisin kuin Jar-tiedostot , moduulit ilmoittavat nimenomaisesti, mistä moduuleista ne ovat riippuvaisia ​​ja mitkä paketit vievät. Täsmälliset riippuvuusilmoitukset parantavat koodin eheyttä helpottamalla suurten sovellusten ja ohjelmistokomponenttien välisten riippuvuuksien päättämistä.

Esimerkiksi seuraava moduulilausunto ilmoittaa, että moduuli com.foo.bar riippuu toisesta com.foo.baz- moduulista ja vie seuraavat paketit: com.foo.bar.alpha ja 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- ja com.foo.bar.beta- pakettien julkiset jäsenet ovat käytettävissä riippuvaisilla moduuleilla. Yksityisiin jäseniin ei pääse edes pohdinnan kaltaisilla keinoilla , vaikka "laiton pääsy" on tosiasiallisesti sallittu komentoriviasetuksesta.

Toisin kuin Jar-tiedostomuoto, moduuli kuvaa nämä riippuvuudet moduulideklaraatiossa, joka sijoitetaan tiedostoon module-info.java moduulin lähdetiedostohierarkian juuressa. JDK pystyy tarkistamaan riippuvuudet ja vuorovaikutuksen moduulien välillä sekä kokoamis- että ajon aikana. Itse JDK on moduloitu Java 9: ​​ssä .

Linkit OSGiin

Java-moduulijärjestelmä ei aio tukea kaikkia toimintoja, joita OSGi- alusta tukee tällä hetkellä (esimerkiksi elinkaarimalli ja palvelurekisteri). Java-moduulijärjestelmä tukee kuitenkin toimintoja, joita OSGi ei tue, kuten modulaarisuus kääntöaikana ja sisäänrakennettu tuki natiivikirjastoille. Pari artikkelia, joissa selvitettiin, kuinka Java-moduulijärjestelmä ja OSGi voisivat toimia yhdessä, julkaistiin vuonna 2016. Ne löytyvät InfoQ: sta ja myös OSGi Alliance -blogista.

Katso myös

Viitteet

Ulkoiset linkit