SlideShare a Scribd company logo
1 of 23
JIGSAW
arto.santala@solita.fi
MIKSI MODUULI?
› Java 1.0, syntymävuosi 1995, on sittemmin jatkanut kasvua ja
turpoamista
• Mukana kaikkea matkan varrelta, mm. Appletit, Corba, Midi
instrumentteja, Swing, jne
› Toisaalta Javan käyttö vaatii skaalautuvuudelta entistä enemmän
• Mobiililaitteet ja IoT laitteet ja niiden kirjastovaatimukset, vs GUI
sovellukset, vs palvelinsovellukset tai pelkkä back-end käyttö
• Raspberry Pi vs 64GB heapillä varustettu AWS-hirviökone
MIKSI MODUULI?
› Javan alkuajoista asti on ollut käytössä termi JAR-helvetti
• https://en.wikipedia.org/wiki/Java_Classloader#JAR_hell
› Mitä ongelmia on .jar tason riippuvuuksien käytössä?
MIKÄ MODUULI?
TULEVAISUUDEN JDK/JRE
OSGI VS JIGSAW
MODUULIN TEKEMINEN
› Moduuleita voi alkaa tekemään – ja käyttämään – määrittelemällä
projektin juureen uusi java-tiedosto: module-info.java
› Joka moduulille tulee omansa, se käännetään, ja säilyy näin mukana
käännösympäristöstä ajoympäristöön
› Module-info määrittää moduulin nimen, julkisena näkyvät paketit
joita se paljastaa, ja muut moduulit joita se tarvitsee toimiakseen
› Module-info ei ota kantaa versiointiin
JIGSAW MODUULIT
MODULE-INFO.JAVA
module mailcore {}
module mailcore {
exports firstpackage;
}
module mailclient {
requires firstpackage;
}
MODUULIEN PELISÄÄNTÖJÄ
› Riippuvuuspolussa ei voi olla kahdesti exports-lausetta samalla
paketille (requires voi toistua)
› Sykliset referenssit pahoja täälläkin (moduuli a riippuu b:stä joka
riippuu a:sta)
› Nimetön moduuli näkee kaikki moduulit, ja julkistaa kaikki
sisältämänsä paketit
• Moduuli accessibility-pelisäännöt astuvat peliin vasta jos määrittelet
moduulin koodillesi
KÄÄNTÄMINEN MODUULIEN KERA
› javac -d build --module-source-path src $(find src -name
"*.java")
› Kääntää moduulit src alla, ja laittaa vastaavaan
hakemistorakenteeseen build-kansion alle
PAKETOIMINEN MODUULIEN KERA
jar --create --file mlib/module2@1.0.jar --module-version
1.0 -C build/module2 .
jar --create --file mlib/module1@1.0.jar --module-version
1.0 --main-class firstpackage.Client -C build/module1 .
AJAMINEN MODUULIEN KERA
java –-module-path mlib -m module1
MODUULIEN LINKITTÄMINEN
jlink –module-path
$JAVA_HOME/jmods:mlib –add-
modules module1 --output
module1
cd module1/bin
./java -listmods
./module1
JDK/JRE
› Tulevassa Java ympäristössä on vain kolme kansiota: bin, conf ja lib
• Vanha jre-kansio katoaa pois, jre unifioituu JDK:hon
• rt.jar ja tools.jar katoaa
› Java versionumerointi menee uusiksi
• http://openjdk.java.net/jeps/223
• $MAJOR.$MINOR.$SECURITY
• Mahdollisesti myös Major versiosta pudotettaisiin alusta ykkönen pois,
eli esim: 9.1.1
JDEPS
› Jdeps työkalulla voit analysoida koodin riippuvuuksia käännetystä
koodista (mukana JDK 8:sta alkaen)
• nimeät vain luokat joita haluat analysoida, tai kansion, tai .jar paketin
• -jdkinternals parametrilla voit rajoittaa näytön vain jdk osiin joita
sovellus vaatii toimiakseen
› jdeps –jdkinternals myapp.jar
MODUULIEN ORGANISOINTI
› Moduulit nimetään kuten paketitkin
› Nyt sopii miettiä tarkemmin, mikä osa julkaistaan, ja mitkä jäävät
piiloon (pakettitasolla), ja mitä riippuvuuksia softa oikeasti tarvitsee
› Hakemistorakenteisiin tulee siis muutos, jos työstät useamman
moduulin projektia:
• src/myapp.solita.fi/fi/solita/myapp/package1/Source.java
SERVICE
› Jigsawiin on myös lisätty perinteinen loose coupling-malli service
consumer ja service producer välille
• Uses, ja provides-avainsanaparit (myös with)
› Ei mitään kovin hienostunutta, mutta provider-moduuli voidaan
vaihtaa ennen käynnistystä
SERVICES ESIM
module com.socket {
exports com.socket;
exports com.socket.spi;
uses com.socket.spi.NetworkSocketProvider;
}
module org.fastsocket {
requires com.socket;
provides com.socket.spi.NetworkSocketProvider
with org.fastsocket.FastNetworkSocketProvider;
}
JIGSAW SUDENKUOPPIA
› Kun hyppää mukaan moduulijärjestelmään, on konseptina sisäinen
ja ulkoinen koodi, eli sisäiset luokat ja rajapinnat eivät olekaan
käytettävissä – mm. JDK ja JRE sisäänrakennetut toteutukset
• JAR paketeissa joka luokka oli käytettävissä, vain näkyvyys vaihteli
• Moduuleissa tulee erikseen julistaa mikä osa on julkista, ja se mitä ei ole
julkaistu, on poissa käytöstä muiden moduulien osalta
JIGSAW SUDENKUOPPIA
› JDK ja JRE viimein yhdistyvät – tarkoittaa isoja muutoksia
hakemistorakenteissa
• eli bye-bye kaikille työkaluille jotka käyttivät esim. jre alihakemistoa
› Tähän liittyen lib/rt.jar ja lib/tools.jar eivät ole enää käytettävissä,
menevät eri muodossa alustakohtaisiin paketteihin eri paikkaan
› Ja samoin tähän liittyen endorsed-mekanismi poistuu, eli kaikki
mikä käytti endorsed-kansiota menee rikki – tilalle tulee
upgradeable modules malli
JIGSAW SUDENKUOPPIA
› UR schema jolla haetaan resursseja muuttuu, tarkoittaen siis esim.
ClassLoader.getSystemResource() komentoja
• Ennen: jar:file:<path-to-jar>!<path-to-file-in-jar>
• Nyt: jrt:/<module-name>/<path-to-file-in-module>
Java9 moduulit jigsaw

More Related Content

Viewers also liked

JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerSimon Ritter
 
Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shellbrendon_jag
 
shell script introduction
shell script introductionshell script introduction
shell script introductionJie Jin
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)Chang-Hwan Han
 
SM Lecture Two : The Environment
SM Lecture Two : The EnvironmentSM Lecture Two : The Environment
SM Lecture Two : The EnvironmentStratMgt Advisor
 
AngularJS performance & production tips
AngularJS performance & production tipsAngularJS performance & production tips
AngularJS performance & production tipsNir Kaufman
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기duriepark 유현석
 
Lesson 4 Introduction to Amadeus
Lesson 4   Introduction to AmadeusLesson 4   Introduction to Amadeus
Lesson 4 Introduction to AmadeusAngelina Njegus
 
Shell and tube heat exchanger design
Shell and tube heat exchanger designShell and tube heat exchanger design
Shell and tube heat exchanger designhossie
 
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your ShellWhy Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shelljaguardesignstudio
 
GDS Systems Overview
GDS Systems OverviewGDS Systems Overview
GDS Systems OverviewEdutour
 
JavaScript Frameworks and Java EE – A Great Match
JavaScript Frameworks and Java EE – A Great MatchJavaScript Frameworks and Java EE – A Great Match
JavaScript Frameworks and Java EE – A Great MatchReza Rahman
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSHannes Hapke
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9Simon Ritter
 

Viewers also liked (16)

JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java Smaller
 
Why zsh is Cooler than Your Shell
Why zsh is Cooler than Your ShellWhy zsh is Cooler than Your Shell
Why zsh is Cooler than Your Shell
 
shell script introduction
shell script introductionshell script introduction
shell script introduction
 
Symfony2 and AngularJS
Symfony2 and AngularJSSymfony2 and AngularJS
Symfony2 and AngularJS
 
자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)자바9 특징 (Java9 Features)
자바9 특징 (Java9 Features)
 
SM Lecture Two : The Environment
SM Lecture Two : The EnvironmentSM Lecture Two : The Environment
SM Lecture Two : The Environment
 
AngularJS performance & production tips
AngularJS performance & production tipsAngularJS performance & production tips
AngularJS performance & production tips
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기
 
Lesson 4 Introduction to Amadeus
Lesson 4   Introduction to AmadeusLesson 4   Introduction to Amadeus
Lesson 4 Introduction to Amadeus
 
Shell and tube heat exchanger design
Shell and tube heat exchanger designShell and tube heat exchanger design
Shell and tube heat exchanger design
 
Amadeus PPT
Amadeus PPTAmadeus PPT
Amadeus PPT
 
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your ShellWhy Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shell
 
GDS Systems Overview
GDS Systems OverviewGDS Systems Overview
GDS Systems Overview
 
JavaScript Frameworks and Java EE – A Great Match
JavaScript Frameworks and Java EE – A Great MatchJavaScript Frameworks and Java EE – A Great Match
JavaScript Frameworks and Java EE – A Great Match
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJS
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9
 

Similar to Java9 moduulit jigsaw

Java - analysointityökaluja
Java - analysointityökalujaJava - analysointityökaluja
Java - analysointityökalujaKari Sarsila
 
Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017Jouni Heikniemi
 
Store App -kehityksen aloittaminen
Store App -kehityksen aloittaminenStore App -kehityksen aloittaminen
Store App -kehityksen aloittaminenSovelto
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptSovelto
 
Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015Teemu Tiainen
 
Syvemmälle javaan
Syvemmälle javaanSyvemmälle javaan
Syvemmälle javaanArto Santala
 
Javan uudet ominaisuudet yhden devaajan silmin
Javan uudet ominaisuudet yhden devaajan silminJavan uudet ominaisuudet yhden devaajan silmin
Javan uudet ominaisuudet yhden devaajan silminKari Sarsila
 
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...Karl Ots
 
Clojure oikeassa projektissa, IT-Päivät 2014
Clojure oikeassa projektissa, IT-Päivät 2014Clojure oikeassa projektissa, IT-Päivät 2014
Clojure oikeassa projektissa, IT-Päivät 2014lokori
 
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoillaVincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoillaVincitOy
 
Big Data -esitys, Arcada ammattikorkeakoulu
Big Data -esitys, Arcada ammattikorkeakouluBig Data -esitys, Arcada ammattikorkeakoulu
Big Data -esitys, Arcada ammattikorkeakouluImmo Salo
 
API Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäAPI Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäArto Santala
 
Kontit pomppimaan3
Kontit pomppimaan3Kontit pomppimaan3
Kontit pomppimaan3Arto Santala
 
JavaScript Frameworkit, jotka kannattaa tuntea
JavaScript Frameworkit, jotka kannattaa tunteaJavaScript Frameworkit, jotka kannattaa tuntea
JavaScript Frameworkit, jotka kannattaa tunteaSovelto
 

Similar to Java9 moduulit jigsaw (14)

Java - analysointityökaluja
Java - analysointityökalujaJava - analysointityökaluja
Java - analysointityökaluja
 
Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017Azure JKL Keynote 9.11.2017
Azure JKL Keynote 9.11.2017
 
Store App -kehityksen aloittaminen
Store App -kehityksen aloittaminenStore App -kehityksen aloittaminen
Store App -kehityksen aloittaminen
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
 
Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015
 
Syvemmälle javaan
Syvemmälle javaanSyvemmälle javaan
Syvemmälle javaan
 
Javan uudet ominaisuudet yhden devaajan silmin
Javan uudet ominaisuudet yhden devaajan silminJavan uudet ominaisuudet yhden devaajan silmin
Javan uudet ominaisuudet yhden devaajan silmin
 
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
Sovellusmodernisoinnin webinaarisarja, osa 2: liiketoimintasovelluksen modern...
 
Clojure oikeassa projektissa, IT-Päivät 2014
Clojure oikeassa projektissa, IT-Päivät 2014Clojure oikeassa projektissa, IT-Päivät 2014
Clojure oikeassa projektissa, IT-Päivät 2014
 
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoillaVincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoilla
Vincit Teatime 2015 - Heikki Salo: Case ZenRobotics: JavaScriptin äärirajoilla
 
Big Data -esitys, Arcada ammattikorkeakoulu
Big Data -esitys, Arcada ammattikorkeakouluBig Data -esitys, Arcada ammattikorkeakoulu
Big Data -esitys, Arcada ammattikorkeakoulu
 
API Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiäAPI Design: 7 kuolemansyntiä
API Design: 7 kuolemansyntiä
 
Kontit pomppimaan3
Kontit pomppimaan3Kontit pomppimaan3
Kontit pomppimaan3
 
JavaScript Frameworkit, jotka kannattaa tuntea
JavaScript Frameworkit, jotka kannattaa tunteaJavaScript Frameworkit, jotka kannattaa tuntea
JavaScript Frameworkit, jotka kannattaa tuntea
 

More from Arto Santala

Your Brain on Java
Your Brain on JavaYour Brain on Java
Your Brain on JavaArto Santala
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11Arto Santala
 
Leaner microservices with Java 10
Leaner microservices with Java 10Leaner microservices with Java 10
Leaner microservices with Java 10Arto Santala
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Arto Santala
 
Solita /dev/cloud kickstart
Solita /dev/cloud kickstartSolita /dev/cloud kickstart
Solita /dev/cloud kickstartArto Santala
 
JavaOne 2016 short highlights
JavaOne 2016 short highlightsJavaOne 2016 short highlights
JavaOne 2016 short highlightsArto Santala
 

More from Arto Santala (7)

Your Brain on Java
Your Brain on JavaYour Brain on Java
Your Brain on Java
 
Java On Speed
Java On SpeedJava On Speed
Java On Speed
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11
 
Leaner microservices with Java 10
Leaner microservices with Java 10Leaner microservices with Java 10
Leaner microservices with Java 10
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)
 
Solita /dev/cloud kickstart
Solita /dev/cloud kickstartSolita /dev/cloud kickstart
Solita /dev/cloud kickstart
 
JavaOne 2016 short highlights
JavaOne 2016 short highlightsJavaOne 2016 short highlights
JavaOne 2016 short highlights
 

Java9 moduulit jigsaw

  • 2. MIKSI MODUULI? › Java 1.0, syntymävuosi 1995, on sittemmin jatkanut kasvua ja turpoamista • Mukana kaikkea matkan varrelta, mm. Appletit, Corba, Midi instrumentteja, Swing, jne › Toisaalta Javan käyttö vaatii skaalautuvuudelta entistä enemmän • Mobiililaitteet ja IoT laitteet ja niiden kirjastovaatimukset, vs GUI sovellukset, vs palvelinsovellukset tai pelkkä back-end käyttö • Raspberry Pi vs 64GB heapillä varustettu AWS-hirviökone
  • 3. MIKSI MODUULI? › Javan alkuajoista asti on ollut käytössä termi JAR-helvetti • https://en.wikipedia.org/wiki/Java_Classloader#JAR_hell › Mitä ongelmia on .jar tason riippuvuuksien käytössä?
  • 7. MODUULIN TEKEMINEN › Moduuleita voi alkaa tekemään – ja käyttämään – määrittelemällä projektin juureen uusi java-tiedosto: module-info.java › Joka moduulille tulee omansa, se käännetään, ja säilyy näin mukana käännösympäristöstä ajoympäristöön › Module-info määrittää moduulin nimen, julkisena näkyvät paketit joita se paljastaa, ja muut moduulit joita se tarvitsee toimiakseen › Module-info ei ota kantaa versiointiin
  • 9. MODULE-INFO.JAVA module mailcore {} module mailcore { exports firstpackage; } module mailclient { requires firstpackage; }
  • 10. MODUULIEN PELISÄÄNTÖJÄ › Riippuvuuspolussa ei voi olla kahdesti exports-lausetta samalla paketille (requires voi toistua) › Sykliset referenssit pahoja täälläkin (moduuli a riippuu b:stä joka riippuu a:sta) › Nimetön moduuli näkee kaikki moduulit, ja julkistaa kaikki sisältämänsä paketit • Moduuli accessibility-pelisäännöt astuvat peliin vasta jos määrittelet moduulin koodillesi
  • 11. KÄÄNTÄMINEN MODUULIEN KERA › javac -d build --module-source-path src $(find src -name "*.java") › Kääntää moduulit src alla, ja laittaa vastaavaan hakemistorakenteeseen build-kansion alle
  • 12. PAKETOIMINEN MODUULIEN KERA jar --create --file mlib/module2@1.0.jar --module-version 1.0 -C build/module2 . jar --create --file mlib/module1@1.0.jar --module-version 1.0 --main-class firstpackage.Client -C build/module1 .
  • 13. AJAMINEN MODUULIEN KERA java –-module-path mlib -m module1
  • 14. MODUULIEN LINKITTÄMINEN jlink –module-path $JAVA_HOME/jmods:mlib –add- modules module1 --output module1 cd module1/bin ./java -listmods ./module1
  • 15. JDK/JRE › Tulevassa Java ympäristössä on vain kolme kansiota: bin, conf ja lib • Vanha jre-kansio katoaa pois, jre unifioituu JDK:hon • rt.jar ja tools.jar katoaa › Java versionumerointi menee uusiksi • http://openjdk.java.net/jeps/223 • $MAJOR.$MINOR.$SECURITY • Mahdollisesti myös Major versiosta pudotettaisiin alusta ykkönen pois, eli esim: 9.1.1
  • 16. JDEPS › Jdeps työkalulla voit analysoida koodin riippuvuuksia käännetystä koodista (mukana JDK 8:sta alkaen) • nimeät vain luokat joita haluat analysoida, tai kansion, tai .jar paketin • -jdkinternals parametrilla voit rajoittaa näytön vain jdk osiin joita sovellus vaatii toimiakseen › jdeps –jdkinternals myapp.jar
  • 17. MODUULIEN ORGANISOINTI › Moduulit nimetään kuten paketitkin › Nyt sopii miettiä tarkemmin, mikä osa julkaistaan, ja mitkä jäävät piiloon (pakettitasolla), ja mitä riippuvuuksia softa oikeasti tarvitsee › Hakemistorakenteisiin tulee siis muutos, jos työstät useamman moduulin projektia: • src/myapp.solita.fi/fi/solita/myapp/package1/Source.java
  • 18. SERVICE › Jigsawiin on myös lisätty perinteinen loose coupling-malli service consumer ja service producer välille • Uses, ja provides-avainsanaparit (myös with) › Ei mitään kovin hienostunutta, mutta provider-moduuli voidaan vaihtaa ennen käynnistystä
  • 19. SERVICES ESIM module com.socket { exports com.socket; exports com.socket.spi; uses com.socket.spi.NetworkSocketProvider; } module org.fastsocket { requires com.socket; provides com.socket.spi.NetworkSocketProvider with org.fastsocket.FastNetworkSocketProvider; }
  • 20. JIGSAW SUDENKUOPPIA › Kun hyppää mukaan moduulijärjestelmään, on konseptina sisäinen ja ulkoinen koodi, eli sisäiset luokat ja rajapinnat eivät olekaan käytettävissä – mm. JDK ja JRE sisäänrakennetut toteutukset • JAR paketeissa joka luokka oli käytettävissä, vain näkyvyys vaihteli • Moduuleissa tulee erikseen julistaa mikä osa on julkista, ja se mitä ei ole julkaistu, on poissa käytöstä muiden moduulien osalta
  • 21. JIGSAW SUDENKUOPPIA › JDK ja JRE viimein yhdistyvät – tarkoittaa isoja muutoksia hakemistorakenteissa • eli bye-bye kaikille työkaluille jotka käyttivät esim. jre alihakemistoa › Tähän liittyen lib/rt.jar ja lib/tools.jar eivät ole enää käytettävissä, menevät eri muodossa alustakohtaisiin paketteihin eri paikkaan › Ja samoin tähän liittyen endorsed-mekanismi poistuu, eli kaikki mikä käytti endorsed-kansiota menee rikki – tilalle tulee upgradeable modules malli
  • 22. JIGSAW SUDENKUOPPIA › UR schema jolla haetaan resursseja muuttuu, tarkoittaen siis esim. ClassLoader.getSystemResource() komentoja • Ennen: jar:file:<path-to-jar>!<path-to-file-in-jar> • Nyt: jrt:/<module-name>/<path-to-file-in-module>

Editor's Notes

  1. Myös: requires public Public-avainsana avaa haetun riippuvuuden automaattisesti kaikille muillekin, jotka käyttävät ko moduulia, esim. Yllä jos muoto olisi: module mailclient { exports clientpackage; requires public firstpackage; } … se tarkoittaisi että jos joku loisi riippuvuuden mailclient-moduuliin, sitä kautta tulisi automaattisesti myös firstpackage-riippuvuus eli näkyvyys. On myös mahdollista rajata näkyvyyttä sille mille kaikille julkaistaan: module java.base { ... exports sun.reflect to java.corba, java.logging, java.sql, java.sql.rowset, jdk.scripting.nashorn; } Eli to-operaattorilla voidaan määrittää mitkä paketit saavat näkyvyyden
  2. Esimerkki jdeps tulostuksesta: -> fi.solita.example.common example-package.jar -> java.io -> java.lang -> java.lang.invoke -> java.sql -> java.text -> java.time -> java.util -> javax.inject not found -> javax.sql -> javax.ws.rs not found -> javax.ws.rs.core not found -> org.springframework.jdbc.core not found -> org.springframework.transaction.annotation not found Katso myös: http://blog.codefx.org/tools/first-release-of-jdeps-maven-plugin/ Huom! Virtuaalikoneessa on –XaddExports lisäkytkin, jolla voi pakottaa haluttujen pakettien julkaisun moduuleille muuttamatta niitä