Modules Flashcards
Wat voor bestand moeten we aanmaken voor een module in java, en wat is de basis syntax voor die module?
module-info.java
.
Deze file kan er zo uit zien:module mymodule {}
Stel: dit is mijn folder structuur:
~~~
src
greeter
module-info.java
javafiles
A.java
B.java
~~~
Welk terminal commando kan ik runnen om greeter als module te compileren?
javac -d out --module-source-path src -m greeter
Hoe zorgen we er in de definitie van een module voor dat een bepaald package beschikbaar is voor de desbetreffende module, en alle andere modules die deze module exporteren?
Met de volgende constructie:
~~~
module mymodule {
exports com.application.mypackage;
}
~~~
Stel, we hebben een package die we exporteren in een module:
module mymodule { exports com.application.mypackage; }
we hebben ook com.application.mypackage.childpackage
. Wordt deze ook geexporteerd?
Nee. com.application.mypackage.childpackage is alleen in mymodule beschikbaar, tenzij expliciet geexporteerd. Het feit dat childpackage een child is van mypackage is irrelevant.
Hoe halen we de de exports van een andere module binnen in onze module?
met requires othermodule;
We hebben dan beschikking over alle packages die other module exporteert.
Stel, we hebben twee modules:
~~~
module mymoduleOne {
imports myModuleTwo;
}
~~~
en
~~~
module mymoduleTwo {
imports mymoduleOne;
}
~~~
Hoe gaat de compiler hiermee om?
Dit gaat niet werken! Circular dependencies, in wat voor vorm dan ook, leveren compilation of runtime errors op.
Stel, we hebben twee modules:
~~~
module mymoduleOne {
imports myModuleTwo;
}
~~~
en
~~~
module mymoduleTwo {
exports com.mypackage;
}
~~~
en vervolgens run ik een compile commando:javac -d out --module-source-path src -m mymoduleone
.
welke modules compileert de compiler?
mymoduleone
en mymoduletwo
. Gezien beide modules nodig zijn is de compiler slim genoeg om beide te compileren.
Hoe runnen we een gecompileerde class?
Met bijvoorbeeld:java -p compilationdir -m my.module.MainClass
Hoe stel ik alle packages binnen een module ter beschikking van andere modules?
door het open
keyword voor je module definitie te zetten.
Hoe specificeer ik dat een package binnen mijn module alleen door 1 of meerdere specifieke modules kan worden geimporteerd?
met het to keyword. Bijvoorbeeld:
~~~
module mymoduleOne {
exports com.mypackage to mymoduleTwo, mymoduleThree;
}
~~~
Wat betekent ‘requires transitive’ in java modules?
transitive betekent dat we niet alleen alle packages verkrijgen van een geimporteerde module, maar ook alle packages van de modules die die module importeert.
Wat is in modules het verschil tussen open
en opens
?
Het keyword open
komt voor een module declaration en betekent dat de module al zijn packages automatisch in alle importerende modules mee importeert.opens
zetten we voor een package definitie. We kunnen zeggen opens {mijn.package} to {mijn.module}
om zo aan te geven in welke andere module de package in ingeladen mag worden.
Wat is het verschil tussen opens en exports?
Het enige wat we voor het examen moeten weten is dat beide exporteren. In beide gevallen kunnen we opens to en exports to zeggen.
Het grote verschil zit hem in reflection; iets wat we voor het examen niet hoeven te weten?
Welke modules hoeven we niet in een module te definiëren omdat ze standaard in elke module ingeladen worden?
- java.base
- java.desktop
- java.logging
- java.sql
- java.xml
Hoe krijg ik in de console een overzicht van alle dependencies in een .jar bestand?
jdeps -s my.project.module.jar
ofjdeps -summary my.project.module.jar