Blog

Java najnovšie verzie – Java 9 moduly (1. časť)

Learn2Code tím - 09.12.2018 - Vzdelávanie

Od verzie 9 bude java vychádzať v pravidelných intervaloch. Každých 6 mesiacov nová java. Takže môžeme očakávať nové funkcionality častejšie, ale v menších dávkach.

Najpoužívanejšia Java v súčasnosti je java 8 – vyšla v roku 2014. Java 9 prvýkrát vyšla v septembri 2017, neskôr boli opravené kritické chyby a dalo by sa povedať, že taká lepšia verzia vyšla v januári 2018. Java 10 vyšla v marci 2018, Java 11 v septembri 2018. Takže rýchly posun vo verziách, ale nie drastický posun vo funkcionalite.

Čo je lepšie? Naraz a veľa alebo menej a postupne? Záleží od toho, čo robíš. Ak používaš veľa frameworkov a knižníc tretích strán, tvoja práca po zvýšení javy môže byť ovplyvnená.

Prvým míľnikom je java 11, ktorá je označená ako LTS, teda long term support. Táto verzia javy bude dlhodobo opravovaná a bude o ňu postarané na najbližšie roky. Čo to znamená? Že je pravdepodobnejšie, že firmy poskočia z javy 8 skôr na javu 11, lebo budú mať istotu, že táto java bude v budúcnosti opravovaná – ak by sa našla nejaká kritická chyba.

V tomto článku sa zameriame hlavne na výpis zmien, čo je nové. Nebudeme sa zaoberať jednotlivými zmenami podrobne. To si necháme do budúcna.

Inštalácia

Najprv si musíš stiahnuť a nainštalovať najnovšiu javu jdk. V čase písania článku je to Java 11. Nastav si premennú prostredia JAVA_HOME na novú javu – na root, nie na bin priečinok. Potom do PATH premennej nastav cestu práve na bin priečinok novo nainštalovanej javy.

Spusti príkazový riadok a zadaj príkaz: java – version

Ak sa ti objavila verzia, všetko je v poriadku.


Ak je nejaká chyba, alebo ukazuje staršiu verziu, tak sa uisti, že v PATH je cesta bin novej javy nastavený na začiatku. Je možné, že v PATH máš nastavené aj C:\ProgramData\Oracle\Java\javapath. Ak áno, tak to musí byť až za cestou na najnovšiu javu.

Moduly

V jave 9 je najskloňovanejšia zmena projekt Jigsaw – ale stačí, ak si zapamätáme, že ide o modularitu – rozdelenie veľkého monolitu – teda celá aplikácia v jednom balíčku na menšie celky – moduly. Moduly potom povedia, čo zverejňujú do sveta a čo požadujú pre svoju správnu funkcionalitu.

Každý modul obsahuje module-info.java súbor a aspoň jeden balík. Modul-info.java v sebe obsahuje popis závislostí, ktoré modul potrebuje. Každý modul je nezávislý v ponímaní, že ak obsahuje obrázky, alebo konfiguračné súbory, tak modul si ich manažuje sám. Všetko, čo je v module je privátne pre modul, ak nepovieme inak.

Existujú 4 typy modulov.

System moduly – Java SE a JDK moduly – ak si všimneš, tak v nainštalovanom jdk pre novšiu javu chýba priečinok jre. Teraz tam je jmods. Tu máme umiestnené všetky už default poskytované moduly.


Aplikačné moduly sú moduly, ktoré chceme vytvárať, keď sa rozhodneme, že chceme používať moduly.

Automatické moduly sa vytvoria, keď pridávame JAR súbory na path modulu. Názov modulu sa preberie z názvu jar súboru. Tieto automatické moduly majú plný prístup na čítanie do všetkých ostatných modulov načítaných na path.

Nepomenovaný modul = ak sa na path – nie na module path – načítajú nejaké triedy alebo jar súbory, tak tieto triedy a jar súbory sú automaticky pridané do tohto nepomenovaného modulu. Slúži na spätnú kompatibilitu s predchádzajúcim starším javovským kódom.

Distribúcia

Modul má byť zbalený ako jar súbor – jeden jar súbor má obsahovať max jeden modul. Keď robíme build projektu, musíme si dať pozor, aby sme zabalili každý modul v našom projekte ako samostatný jar.

Základné moduly

Vraveli sme si, že jdk má novú štruktúru, ktorá má v sebe jmodules. Tu sú základné moduly. Tieto moduly si vieme vypísať pomocou príkazového riadku ak zadáme príkaz <b>java --list-modules</b>.


Každý modul, ktorý vytvoríme, bude používať implicitne java.base modul. Použitie iných modulov bude dostupné po konfigurácii.

Vytvorenie modulu

Modul v podstate vznikne, ak zadefinujeme v roote zdrojového kódu modulu súbor module-info.java.

Týmto momentom sa pracuje so zdrojovým kódom ako s modulom. Moduly sa navzájom nevidia – nemajú prístup jeden do druhého a do tretieho a tak ďalej. Podľa toho koľko modulov používame.

Ak chceš používať niečo z vonku, alebo chceš, aby vnútro tvojho modulu, alebo čas vnútra tvojho modulu bolo viditeľné, musíš to zadefinovať.

Majme projekt, do ktorého si zadefinujeme nový modul. V module máme src priečinok, do ktorého budeme dávať všetok zdrojový kód. Vo vnútri si zadefinujeme balíček sk.jaro.demo a v ňom ešte external a internal. Vytvoríme si jednoduché triedy, ktoré len niečo vypíšu na konzolu.

package sk.jaro.demo.external;
   
   public class HelloMainModuleExternal   {
       public void doAction() {
           System.out.println
                   ("Hello main   module HelloMainModuleExternal");
       }
   }
package sk.jaro.demo.internal;
   
   public class HelloMainModuleInternal {
     public void doAction() {
         System.out.println("Hello main module HelloMainModuleInternal");
     }
 }

Tieto triedy sú odlišné len v názve a výpise na konzolu. Internal si neskôr nastavíme, aby bola viditeľná len v module main. External si neskôr nastavíme, aby bola viditeľná aj mimo modulu main.

V src tohto modulu si vytvor súbor module-info.java. Vnútro súboru má syntax, kde je najprv kľúčové slovo modul, potom názov modulu – vieš používať aj bodky a potom sú kučeravé zátvorky: modul nazovmodulu{ }. Chceme, aby balíček external bol dostupný aj pre iné moduly – musíme nastaviť aby sa exportoval.

module main {
    exports sk.jaro.demo.external;
}

Teraz si vytvoríme nový modul v tom istom projekte s názvom utils. Vo vnútri budeme mať jednu triedu, v ktorej sa budeme snažiť použiť HelloMainModuleExternal triedu z modulu main.


Module-info.java musí teraz obsahovať, že v tomto module vyžadujeme modul main – pretože používame funkcionalitu z tohto modulu.

module utils {
     requires main;
 }

Teraz môžeme použiť triedy, ktoré boli exportnuté z main modulu:

package sk.jaro.demo;
   
   import sk.jaro.demo.external.HelloMainModuleExternal;
   
   public class UseSomethingFromMainModule {
     public static void main(String[] args) {
         HelloMainModuleExternal helloMainModuleExternal = new HelloMainModuleExternal();
         helloMainModuleExternal.doAction();
     }
 }

Záver

Na záver by si sa mohol teraz s tým kúsok pohrať. Skús použiť triedu, ktorá nie je exportnutá z modulu main.

O moduloch by sa dalo písať a hovoriť viac, ale dúfam, že si porozumel princípu modularizácie. Mne v priebehu študovania tejto témy vybehlo pár otázok, na ktoré som si ešte neodpovedal. Napríklad: Maven s java modularizáciou? Frameworky a modularizácia?

Ak sa ti článok páčil, tak napíš niečo do komentárov, poteší ma to.

Zaujímaš sa o Javu? Skús jeden z kurzov na túto tému na www.learn2code.sk.

Ak sa chceš o mne dozvedieť viacej sleduj môj web www.jaroslavbeno.sk.

Jaro


Zdrojové kódy na stiahnutie.



Logo facebook

Learn2Code tím

Učíme ľudí dizajnovať, robiť webstránky a programovať. Naše prezenčné kurzy nájdeš vo viacerých mestách na Slovensku a pomocou online kurzov sa môžeš vzdelávať z pohodlia domova.


Využi toto leto: Online kurzy, za ktoré neplatíš!

Vzdelávanie

Ešte stále nám zostáva pár týždňov prázdnin. Čo tak využiť horúce letné dni a okrem zábavy a dovoleniek sa čosi naučiť? Nemusíš nikam chodiť, učiť sa...

Front-End development technológie

Vzdelávanie

Porovnaniu svetov Front-End a Back-End vývoja sme sa venovali pred pár mesiacmi. Dnes sa budeme hrabať v nástrojoch Front-End programátorov - čo všetko...

Frontend vs Backend: v čom je rozdiel?

Vzdelávanie

Vo februári 1997 bolo na sieti Internet prístupných milión webov. To bolo pred dvadsiatimi rokmi (tiež som si práve uvedomil aký som starý). Dnes by sme...