java9 moduulit jigsaw
Post on 11-Feb-2017
71 Views
Preview:
TRANSCRIPT
JIGSAWarto.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.JAVAmodule 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 KERAjar --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 KERAjava –-module-path mlib -m module1
MODUULIEN LINKITTÄMINENjlink –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 ESIMmodule 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>
top related