Späť na blog
Vzdelávanie

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

Skillmea tím
09.12.2018
8 minút čítania

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 https://skillmea.sk.

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

Jaro


Zdrojové kódy na stiahnutie.


Skillmea tím

Sme jednotka v online vzdelávaní na Slovensku.

Na našom webe nájdeš viac ako 260 rôznych videokurzov z oblastí ako programovanie, tvorba hier, testovanie softwaru, grafika, UX dizajn, online marketing, MS Office a pod. Vyber si kurz, ktorý ťa posunie vpred ⏩

Mohlo by ťa zaujímať

Vzdelávanie
12.08.2017
Martina Baumann

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

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 môžeš - kedy chceš a kde chceš - v pohodlí domova alebo niekde vonku na lehátku s prístupom na internet. Kurzy nám neustále pribúdajú, to vieme všetci. Len nedávno sme si však povedali, že poďme urobiť kurzy pre všetkých zadarmo - teda aj pre teba, tvojho kamoša, suseda, otca, mamu, sesternicu. V čom je pridaná hodnota týchto kurzov? V tom, že sú dostupné zdarma, a tak môžeš ušetrené euráče minúť niekde inde. Napríklad na nejaké fajnové drinky. Letná akcia so Zlavadna.skSamozrejme, platené kurzy nám v ponuke naďalej zostávajú. Ale aj tie máš teraz šancu vyskúšať v špeciálnej letnej akcii. Ako je to možné? Nie, nevyhrali sme jackpot (teda aspoň zatiaľ nie), len sme urobili ďalší zaujímavý deal pre teba. O čom to teda hovorím? Neobmedzený prístup ku všetkým online kurzom na Learn2Code počas troch mesiacov. Čítaš dobre, naozaj to nie sú halucinácie z tepla, ale rozhodli sme sa urobiť opäť nejakú tú tučnú akciu pre teba a tvojich kamošov. Do akcie sa zapoj TU. Java pre začiatočníkovTento online kurz je už podľa názvu vhodný pre začiatočníkov tak, aby sa naučili jednoducho programovať v najrozšírenejšom a najpoužívanejšom programovacom jazyku Java. Tento kurz vysvetľuje históriu, základné pojmy, nastavenie prostredia až po rôzne výnimky a samotné programovanie. Visual Design: Dizajn vlastného tričkaV tomto kurze sa naučíte, ako si vytvoriť vlastný motív na tričko. Okrem celkového vytvorenia dizajnu sa dozviete, aké farby a nástroje si treba pri vytváraní zvoliť, taktiež sa naučíte niečo o jednotlivých nástrojoch, farebných režimoch, o formátoch ako sú JPG, TIFF a PNG. Kurz je opäť vhodný pre začiatočníkov. Základy online stratégieOnline kurz prevedie študenta základmi online marketingovej stratégie, pričom získa všeobecný prehľad a dobrý základ pre ďalšie vzdelávanie v oblasti online marketingu. Napríklad aj to, ako sa zákazníci správajú a rozhodujú pri nákupe, ako funguje nákupný model See-Think-Do-Care, podľa ktorého si môže študent navrhnúť a vytvoriť vlastnú komunikačnú stratégiu. Základy online marketinguOkrem základných pojmov z online marketingu sa študenti zoznámia s content marketingom a ako ho robiť, základy performance marketingu, social media marketingu a marketingu vo vyhľadávačoch. Lektori online kurzu tu tiež vysvetľujú, čo je to landing page a prečo je vôbec dôležitá. Kde treba hľadať tieto kurzy?Netreba nejako zvlášť hľadať, uľahčím ti to. Pohodlne sa usaď, zapni si ventilátor a klikaj SEM (nájdeš tu prehľad všetkých kurzov, ktoré sú zdarma. Stačí si len vybrať). Páči sa ti naša ponuka kurzov? Ak áno, zdieľaj toto posolstvo aj medzi ostatných kamošov. 
Vzdelávanie
30.07.2017
Lubomir Herko

Front-End development technológie

...
Vzdelávanie
28.05.2017
Lubomir Herko

Frontend vs Backend: v čom je rozdiel?

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 ich rátali v stovkách miliónov. Od tej doby prešiel vývoj webov neskutočnými zmenami. Z jednoduchých prezenčných stránok nakreslených v skicári a oživených HTML, CSS a JavaScript kódom sa stali zložité CMS, LMS, CRM a WTF systémy postavené na niektorých z desiatok back-end technológií. Dáta môžeme ukladať do SQL alebo NoSQL databázy a súbory už nenahrávame jednoducho na server cez FTP, ale používame zložité build systémy, ktoré náš kód najprv otestujú a až potom posunú do produkcie. Aplikácie otvárame na tabletoch, smartfónoch, laptopoch, chladničkách, … – preto je dobré ak majú responzívny dizajn. Aby tej terminológie nebolo málo. Jednému programátorovi to množstvo technológií, s ktorými sa denne stretáva, začína prerastať cez hlavu. Preto sa web vývojári začínajú špecializovať. Dve najvýraznejšie skupiny sú front-end a back-end vývojári. Ďalší by boli full-stack vývojári, DevOps.. Tento text ti pomôže pochopiť, čo je úlohou front-end a back-end vývojára a s akými technológiami najčastejšie tieto dve skupiny vývojárov pracujú. PolopatistickyAk chce programátor postaviť dom, najprv zavolá back-end tím: murára a tesára. Back-end murár mu vybetónuje základy, postaví steny, vymuruje otvory na dvere a okná. Neskôr mu pomôže back-end tesár. Ten postaví strechu. V takomto dome by sa však bývalo ťažko - preto príde front-end tím: maliar a bytový dizajnér. Front-end tím zútulní tehlové steny a zariadi dom – aby všetko vyzeralo parádne, spolu ladilo a hlavne plnilo svoj účel. Ak to premeníme na web-development svet, tak back-end je základom pre našu aplikáciu. Je to skrytá časť aplikácie (používateľ ju nevidí), ktorá úzko spolupracuje so serverom, databázou. Úlohou back-end programátora je tvoriť kód, ktorý je efektívny, zbytočne nezaťažuje server, databázu - napr. aby používateľ nečakal príliš dlho na potrebné dáta. Už dve sekundy sú nekonečno. Front-end je zase tá časť aplikácie, ktorú vidí a pracuje s ňou používateľ. Často je označovaná pojmom User Interface (UI). Úlohou front-end programátora je, aby sa aplikácia zobrazovala každému používateľovi správne a aby mu čo najviac uľahčila prácu s aplikáciou. Front-end programátor vie z tvojho jednoduchého kliku na tlačidlo vyrobiť parádnu animáciu, ktorá ti napr. odkryje ďalšie možnosti práce s aplikáciou. Jazyky, nástrojeVývojári pracujú s mnnožstvom technológií, ktoré sa niekedy menia od projektu k projektu. Diagramy zobrazujú len najpoužívanejšie technológie. Dôležité je rozumieť, že nie všetky technológie z diagramu musí vývojár ovládať - je však dobré o väčšine z nich aspoň niečo vedieť - pri veľkých projektoch môže mať niektorá technológia výhody, iná nevýhody. To je ale na dlhú debatu a mal by to riešiť vývojársky tím interne, najlepšie face-to-face. V žiadnom prípade neodporúčam pýtať sa na sociálnych sieťach, či je lepší React, alebo Vue JS. Nikam to nevedie :)  [Backend technológie] [Frontend technológie]Samostatnú kapitolu by mohli tvoriť webové frameworky ako Ruby on Rails, Laravel alebo ExpressJS. Tie nám uľahčujú postaviť celú aplikáciu - front-end aj back-end časť. Technológie v Learn2CodeKaždá webová aplikácia má iné nároky a výber technológií často súvisí aj so skúsenosťami a preferenciami tímu riadeného skúseným CTO. Takýto koktejl technológií sme namiešali v Learn2Code pre naše projekty: Front-EndPracujeme s frameworkom Ruby on Rails. S front-end časťou aplikácie nám v Rails pomáha SASS preprocesor, vďaka ktorému máme CSS štýly organizované v komponentoch a veľmi jednoducho sa v nich orientuje. Základ nášho layoutu tvorí framework Bootstrap, ktorého vzhľad je upravený pomocou CSS štýlov - opäť s využitím SASS. Na niektoré časti aplikácie https://skillmea.sk sme nasadili React - prezeranie videí, fórum. V starších projektoch stále využívame jQuery. Uvažovali sme nad experimentovaním s Vue.js, nakoniec túto technológiu neimplementujeme. Yablko však bude robiť online kurz na Vue.js :) React a všetky jeho závislosti spravuje NPM - Node Package Manager a WebPack, ktorý nakoniec vypľuje jeden veľký bundle.js súbor. Back-EndKeďže používame Rails, back-end je písaný v skriptovacom jazyku Ruby. Na testovanie používame RSpec. Používame relačnú databázu PostgreSQL, kde máme uložené všetky dáta. DevOpsAplikácie nám bežia na serveroch Heroku. Obrázky skladujeme na Amazon S3. Video obsah je uložený na serveroch Vimeo, s ktorými komunikuje React prostredníctvom REST API. Kód všetkých projektov skladujeme v privátnych repozitároch na GitHub. Na nekvalitný kód nás neustále upozorňuje RuboCop a JSHint. Nasadenie nových funkcií do hlavnej aplikácie je riadené s pomocou Continuous Integration - CodeShip.com. Niektoré z technológií, ktoré používame možno poznáš. Niektoré z nich ťa dokonca vieme naučiť aj u nás v Learn2Code, stačí pozrieť zoznam kurzov. V ďalších blogoch sa pozrieme na front-end aj back-end detailnejšie. Ak máš nejaké otázky, postrehy alebo si niečomu nerozumel, napíš komentár.

Nezmeškaj info o nových kurzoch a špeciálnych ponukách