ããã«ã¡ã¯ãHabrã
å°ãé
ããŠãJigsawãããžã§ã¯ãã«é¢ããèšäºã®ç¬¬2éšãšCodecentricããã°ã§å
¬éãããŠããJava 9ãå
¬éããŸãã æåã®éšåã®ç¿»èš³ã¯
ãã¡ãã§ãã
ããã¯ããžã°ãœãŒããºã«ãããžã§ã¯ãã詳ãã調ã¹ãã人ã®ããã®èšäºã®ç¬¬2éšã§ãã
第1éšã§ã¯ãã¢ãžã¥ãŒã«ãšã¯äœããJavaã©ã³ã¿ã€ã ã©ã³ã¿ã€ã ãã©ã®ããã«ã¢ãžã¥ãŒã«åããããã«ã€ããŠç°¡åã«èª¬æããŸããã æ¬¡ã«ãã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã«ãããã±ãŒãžåãå®è¡ã®ç°¡åãªäŸãèŠãŠã¿ãŸããã
ããã§ã¯ã次ã®è³ªåã«çããããšããŸãã
- ãšã¯ã¹ããŒããããããã±ãŒãžãèªã¿åãããšãã§ããã¢ãžã¥ãŒã«ã«å¶éãå°å
¥ããããšã¯å¯èœã§ããïŒ
- ã¢ãžã¥ãŒã«ãã¹ã«ååšããåãã¢ãžã¥ãŒã«ã®ç°ãªãããŒãžã§ã³ã§äœãããå¿
èŠããããŸããïŒ
- Jigsawã¯éã¢ãžã¥ã©ãŒã¬ã¬ã·ãŒã³ãŒããšã©ã®ããã«çžäºäœçšããŸããïŒ
- ç¬èªã®Javaã©ã³ã¿ã€ã ã€ã¡ãŒãžãæ§ç¯ããæ¹æ³ã¯ïŒ
åºç€ãšããŠããŒã1ã®äŸãåãäžããåŒãç¶ãäœæ¥ããŠãã ããã ã³ãŒãã¯ãŸã ããã«ãããŸãã
ç¹å®ã®ã¢ãžã¥ãŒã«ãžã®èªã¿åãã¢ã¯ã»ã¹ãèš±å¯ããæåã®éšåã§ã¯ãJigsawã®äžéšãšããŠJavaã¢ã¯ã»ã·ããªãã£ãã©ã®ããã«éçºãããŠãããã«ã€ããŠè©±ããŸããã èšåãããŠããããæ¬¡ã®ããã«æç¢ºã«ãããŠããªãã¢ã¯ã»ã·ããªãã£ã¬ãã«ã®1ã€ã¯ããäžéšã®ã¢ãžã¥ãŒã«ããã®ã¢ãžã¥ãŒã«ãèªã¿åãã¢ãžã¥ãŒã«ã«å¯ŸããŠãããªãã¯ãã§ãã ãã®ããããšã¯ã¹ããŒããããããã±ãŒãžã®èªã¿åããèš±å¯ããã¢ãžã¥ãŒã«ã®ç¯å²ãå¶éã§ããŸãã
de.codecentric.zipvalidator
ã®éçºè
ãšããŸããã
de.codecentric.zipvalidator
éçºè
ãå«ã
de.codecentric.nastymodule
de.codecentric.nastymodule
ããããã£ãŠåœŒãã¯
module-info.java
ã倿Žã§ã
module-info.java
module-info.java
ãã®ããã«ïŒ
module de.codecentric.zipvalidator{ exports de.codecentric.zipvalidator.api to de.codecentric.addresschecker; }
ãããã£ãŠã
addresschecker
ã®ã¿
addresschecker
zipvalidator
APIã«ã¢ã¯ã»ã¹ã§ããŸã
zipvalidator
ã ãã®æç€ºã¯ããã±ãŒãžã¬ãã«ã§å®è¡ããããããäžéšã®ããã±ãŒãžãžã®ã¢ã¯ã»ã¹ãå¶éãããšåæã«ãä»ã®ããã±ãŒãžãžã®ãã«ã¢ã¯ã»ã¹ãäžããããšã劚ãããã®ã¯ãããŸããã ãã®æ¹æ³ã¯ã
修食ãšã¯ã¹ããŒããšåŒã°ã
ãŸã ã ã¢ãžã¥ãŒã«ã
de.codecentric.nastymodule
å Žå
de.codecentric.nastymodule
de.codecentric.zipvalidator.api
ããä»»æã®ã¿ã€ãã«ã¢ã¯ã»ã¹ããããšããŸã
de.codecentric.zipvalidator.api
ã³ã³ãã€ã«ãšã©ãŒãçºçããŸãã
./de.cc.nastymodule/de/cc/nastymodule/internal/AddressCheckerImpl.java:4: error: ZipCodeValidatorFactory is not visible because package de.cc.zipvalidator.api is not visible
泚ïŒããã°ã©ã ã¯
module-info.java
èªããŸãã
module-info.java
zipvalidator
以æ¥
zipvalidator
åºæ¬çã«ã
nastymodule
å¯èŠããã±ãŒãžããšã¯ã¹ããŒãã§ããŸã
nastymodule
ã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®å
éšæ§é ãã¢ãžã¥ãŒã«åãããããå
éšã¢ãžã¥ãŒã«ã®ãšã¯ã¹ããŒããããããã±ãŒãžãã¯ã©ã€ã¢ã³ããšå
±æããããªãå Žåã«ãéå®ãšã¯ã¹ããŒããé©çšã§ããŸãã
ã¢ãžã¥ãŒã«ããŒãžã§ã³éã®ç«¶åå€ãã®å Žåãæšç§»çãªäŸåé¢ä¿ãä»ããŠãç°ãªãããŒãžã§ã³ã®ã©ã€ãã©ãªãåãã¢ããªã±ãŒã·ã§ã³ã«å
¥ããŸããã€ãŸããåãã¢ãžã¥ãŒã«ãã¢ãžã¥ãŒã«ãžã®ãã¹ã«2åçŸããããšããããŸãã 2ã€ã®ã·ããªãªãããã«æãæµ®ãã³ãŸãã
- ã¢ãžã¥ãŒã«ã¯ç°ãªããã£ã¬ã¯ããªãŸãã¯ã¢ãžã¥ã©ãŒjarã§ã³ã³ãã€ã«æã«äœ¿çšå¯èœã§ããããããã«ããŠãåãååãæã£ãŠããŸã
- åãã¢ãžã¥ãŒã«ã®ç°ãªãããŒãžã§ã³ã¯ç°ãªããŸã
æåã®ã·ããªãªã«åŸã£ãŠã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠã¿ãŸãããã
zipvalidator
ã³ããŒ
zipvalidator
ïŒ
two-modules-multiple-versions âââ de.codecentric.addresschecker â âââ de â â âââ codecentric â â âââ addresschecker â â âââ api â â â âââ AddressChecker.java â â â âââ Run.java â â âââ internal â â âââ AddressCheckerImpl.java â âââ module-info.java âââ de.codecentric.zipvalidator.v1 â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ api â â â âââ ZipCodeValidator.java â â â âââ ZipCodeValidatorFactory.java â â âââ internal â â â âââ ZipCodeValidatorImpl.java â â âââ model â âââ module-info.java âââ de.codecentric.zipvalidator.v2 â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ api â â â âââ ZipCodeValidator.java â â â âââ ZipCodeValidatorFactory.java â â âââ internal â â â âââ ZipCodeValidatorImpl.java â â âââ model â âââ module-info.java
éè€ããã¢ãžã¥ãŒã«ã¯ç°ãªããã£ã¬ã¯ããªã«ãããŸãããã¢ãžã¥ãŒã«åã¯å€æŽãããŸããã ã³ã³ãã€ã«æã«ãžã°ãœãŒããºã«ã¯ããã«ã©ã®ããã«åå¿ããŸããïŒ
./de.codecentric.zipvalidator.v2/module-info.java:1: error: duplicate module: de.codecentric.zipvalidator
ã§ããããããã§éããããšã¯ç°¡åã§ãã ã¢ãžã¥ãŒã«ãžã®ãã¹ã«åãååã®2ã€ã®ã¢ãžã¥ãŒã«ãååšããå ŽåãJigsawã¯ã³ã³ãã€ã«ãšã©ãŒãã¹ããŒããŸãã
2çªç®ã®ã±ãŒã¹ã¯ã©ãã§ããïŒ ãã£ã¬ã¯ããªæ§é ã¯åããŸãŸã§ãããçŸåšã¯äž¡æ¹ã®zipvalidatorsã«ç°ãªãååãä»ããããŠããŸãïŒ
de.codecentric.zipvalidator.v{1|2}
de.codecentric.zipvalidator.v{1|2}
ïŒãaddresscheckerã¯ãããã®ååã®äž¡æ¹ãèªã¿åããŸãã
module de.codecentric.addresschecker{ exports de.codecentric.addresschecker.api; requires de.codecentric.zipvalidator.v1; requires de.codecentric.zipvalidator.v2; }
ã»ãšãã©ã®å Žåãããã§ã³ã³ãã€ã«ãããŸãããïŒ åãããã±ãŒãžããšã¯ã¹ããŒããã2ã€ã®ã¢ãžã¥ãŒã«ãèªã¿åããŸããïŒ ã³ã³ãã€ã«ã倿ããŸããã ç§èªèº«ã¯é©ããŸãããã³ã³ãã€ã©ã¯ç¶æ³ãèªèããŸããããã®ãããªèŠåã«ãã£ãŠã®ã¿å¶éãããŸãã
./de.cc.zipvalidator.v1/de/codecentric/zipvalidator/api/ZipCodeValidator.java:1: warning: package exists in another module: de.codecentric.zipvalidator.v2
éçºè
ã¯ãã®ãããªèŠåãããã«ç¡èŠããŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã ãããããžã°ãœãŒã¯æããã«ãå®è¡æã«è¡šç€ºããããã®ã奜ãã§ã¯ãããŸããã
java.lang.module.ResolutionException: Modules de.codecentric.zipvalidator.v2 and de.codecentric.zipvalidator.v1 export package de.codecentric.zipvalidator.api to module de.codecentric.addresschecker
ç§ã®æèŠã§ã¯ãã³ã³ãã€ã«æã®ãšã©ãŒãããæ£ç¢ºã«ç¹å®ããããšã¯ã§ããŸããã
ãã¥ãŒã¹ã¬ã¿ãŒã§ããªããã®ãããªãªãã·ã§ã³ãéžã°ããã®ããå°ããŸããããå·çã®æç¹ã§ã¯ãç§ã¯çããåãåã£ãŠããŸããã
èªåã¢ãžã¥ãŒã«ãšå¿åã¢ãžã¥ãŒã«ãããŸã§ãå®å
šã«ã¢ãžã¥ãŒã«åãããç°å¢ã§äœæ¥ããŠããŸããã ããããéã¢ãžã¥ã©ãŒJarãã¡ã€ã«ãåŠçããªããã°ãªããªãéåžžã«ãããããªã±ãŒã¹ã§ã¯ã©ãããã°ããã§ããããïŒ ããã¯ã
èªåã¢ãžã¥ãŒã«ãš
ååã®ãªãã¢ãžã¥ãŒã«ã
äœçšããå Žæã§ãã
èªåã¢ãžã¥ãŒã«ããå§ããŸãããã èªåã¢ãžã¥ãŒã«ã¯ãã¢ãžã¥ãŒã«ãã¹ã§æäŸãããjarãã¡ã€ã«ã§ãã ããã«æžãããããã®ã¢ãžã¥ãŒã«ã«é¢ããæ¬¡ã®3ã€ã®è³ªåã«çããããšãã§ããŸãã
QïŒåœŒã®ååã¯äœã§ããïŒ
AïŒããã¯ãjarãã¡ã€ã«ã®ååã§ãã ã¢ãžã¥ãŒã«ãžã®ãã¹ã«guava.jarãã¡ã€ã«ãé
眮ãããšãèªåã°ã¢ãã¢ãžã¥ãŒã«ãååŸãããŸãã
ãŸããguava-18.0ã¯æå¹ãªJavaèå¥åã§ã¯ãªããããMavenãªããžããªããJarãçŽæ¥äœ¿çšããããšã¯ã§ããŸããã
QïŒäœããšã¯ã¹ããŒãããŸããïŒ
AïŒèªåã¢ãžã¥ãŒã«ã¯ããã¹ãŠã®ããã±ãŒãžããšã¯ã¹ããŒãããŸãã ãããã£ãŠããã¹ãŠã®ãããªãã¯ã¿ã€ãã¯ãèªåã¢ãžã¥ãŒã«ãèªã¿åããã¹ãŠã®ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããŸãã
QïŒåœŒã¯äœãå¿
èŠãšããŸããïŒ
AïŒèªåã¢ãžã¥ãŒã«ã¯ãä»ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ïŒ*ãã¹ãŠ*ïŒãèªã¿åããŸãïŒååã®ãªããã®ãå«ãã詳现ã¯ä»¥äžãåç
§ïŒã ããã¯éèŠã§ãïŒ èªåã¢ãžã¥ãŒã«ãããä»»æã®ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®ãšã¯ã¹ããŒããããã¿ã€ãã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ç¬éã¯ã©ãã«ã瀺ãããã¹ããã®ã§ã¯ãªããæç€ºãããŠããŸãã
äŸãèããŠã¿ãŸãããã zipvalidatorã§com.google.common.base.Stringsã䜿çšãå§ããŠããŸãã ãã®ã¢ã¯ã»ã¹ãèš±å¯ããã«ã¯ãèªåGuavaã¢ãžã¥ãŒã«ã®èªã¿åããšããžãå®çŸ©ããå¿
èŠããããŸãã
module de.codecentric.zipvalidator{ exports de.codecentric.zipvalidator.api; requires public de.codecentric.zipvalidator.model; requires guava; }
ã³ã³ãã€ã«ããã«ã¯ãã¢ãžã¥ãŒã«ãžã®ãã¹ã§guava.jarãã¡ã€ã«ãæå®ããå¿
èŠããããŸãïŒ../jarsãã£ã¬ã¯ããªã«ãããŸãïŒã
javac -d . -modulepath ../jars -modulesourcepath . $(find . -name "*.java")
ãã¹ãŠãã³ã³ãã€ã«ãããæ£åžžã«å®è¡ãããŸãã
ïŒãšããã§ããã®äŸãå®è¡ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã§ãã
jdk.management.resource
ãã«ãã®äœæ¥äžã«ãããã€ãã®åé¡ã«ééããŸãããã·ã¹ãã ã
jdk.management.resource
ã¢ãžã¥ãŒã«ãžã®äŸåé¢ä¿ãåªããŸãã
jdk.management.resource
ã ç§ã¯ãã¥ãŒã¹ã¬ã¿ãŒã§ããã«ã€ããŠå°ã
ãŸãã ãè°è«ã¯
ãã¡ãã§ãã
ç§ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããã¢ãŒãªãŒããã«ãïŒã¢ãŒãªãŒã¢ã¯ã»ã¹ãã«ãïŒã䜿çšããªãã£ãããJDKã¯èªåã§ãã«ããããšèšããªããã°ãªããŸããã OSX Mavericksã䜿çšããå Žåãã¹ã¬ããã«èšè¿°ãããŠããããããŸã ããã€ãã®åé¡ããããŸãããã¡ã€ã¯ãã¡ã€ã«ã倿Žããå¿
èŠããããŸããããæçµçã«ã¯ãã¹ãŠãæ£ãããªããŸããã æ¬¡ã®ãªãªãŒã¹ã§äœæ¥ãããšãã¯ãä»ã®åé¡ã«å¯ŸåŠããå¿
èŠããããŸãïŒã
ä»ããããžã°ãœãŒããºã«ã«åãæ¿ãããšãã«äžå¯æ¬ ãªéæ³ã®æã玹ä»ãããšãã§ãã ãã®ããŒã«ã¯
jdeps
ãšåŒã°ã
jdeps
jdeps
ã ã¢ãžã¥ãŒã«åãããŠããªãã³ãŒããã¹ãã£ã³ããäŸåé¢ä¿ãéç¥ããŸãã
ã°ã¢ããæ€èšããŠãã ããïŒ
jdeps -s ../jars/guava.jar
次ã®çµè«ããããŸãã
guava.jar-> java.base
guava.jar-> java.logging
guava.jar->èŠã€ãããŸãã
ããã¯ãèªå
java.base
ã¢ãžã¥ãŒã«ã
java.base
å¿
èŠãšããããšãæå³ããŸã
java.base
ã
java.logging
java.logging
ãããŠ...ãèŠã€ãããŸãããïŒïŒ ãªã«
-s
ãåé€ããå Žå
-s
ãã®åŸã
jdeps
jdeps
ã¢ãžã¥ãŒã«ã¬ãã«ãçµäºããããã±ãŒãžã¬ãã«ã«é²ã¿ãŸãïŒã°ã¢ãã«ã¯å€ãã®ããã±ãŒãžãããããããªã¹ãã¯å°ãçããªããŸãïŒã
com.google.common.xml (guava.jar) -> com.google.common.escape guava.jar -> java.lang -> javax.annotation not found
ããã¯ãããã±ãŒãž
com.google.common.xml
com.google.common.xml
com.google.common.escape
äŸå
com.google.common.escape
ã¢ãžã¥ãŒã«èªäœã
java.lang
java.lang
ããã¯ããç¥ãããŠããã
javax.annotation
ã¢ãããŒã·ã§ã³ãã
javax.annotation
èŠã€ãããŸããã
javax.annotation
ãå«ãŸããŠãããããJSR-305åã®jarãå¿
èŠã§ãããšçµè«ä»ããŸããã
javax.annotation
ïŒãšããã§ãç§ã¯ããããªãã§è¡ãããšãã§ããŸã-ç§ã®äŸã§ã¯ããããã®ããã±ãŒãžã®ã¿ã€ãã¯å¿
èŠãªããã³ã³ãã€ã©ãã©ã³ã¿ã€ã ãªããžã§ã¯ããå¿
èŠãããŸããïŒã
ååã®ãªãã¢ãžã¥ãŒã«ååã®ãªãã¢ãžã¥ãŒã«ãšã¯äœã§ããïŒ åã³3ã€ã®è³ªåã«çããŸãã
QïŒåœŒã®ååã¯äœã§ããïŒ
AïŒãæ³åã®ãšããã圌ã«ã¯ååããããŸãã
QïŒäœããšã¯ã¹ããŒãããŸããïŒ
AïŒååã®ãªãã¢ãžã¥ãŒã«ã¯ããã¹ãŠã®ããã±ãŒãžãä»ã®ã¢ãžã¥ãŒã«ã«ãšã¯ã¹ããŒãããŸãã ããã¯ãä»ã®ã¢ãžã¥ãŒã«ããèªã¿åãããšãã§ããããšãæå³ãããã®ã§ã¯ãããŸãããååããªããèŠæ±ããããšã¯ã§ããŸããã ã³ãã³ãã«ã¯ååã®ãªãååãå¿
èŠã§ãã åäœããŸããã
QïŒåœŒã¯äœãå¿
èŠãšããŸããïŒ
AïŒååã®ãªãã¢ãžã¥ãŒã«ã¯ãå©çšå¯èœãªä»ã®
ãã¹ãŠã®ã¢ãžã¥ãŒã«ãèªã¿åããŸãã
ã ãããããªãã®ã¢ãžã¥ãŒã«ã®ããããããååã®ãªãã¢ãžã¥ãŒã«ãèªã¿åãããšãã§ããªãå Žåããã€ã³ãã¯äœã§ããïŒ ç§ãã¡ã®æ§åã§ããã¯ã©ã¹ãžã®éã¯ããã®è³ªåã«çããã®ã«åœ¹ç«ã¡ãŸãã ïŒã¢ãžã¥ãŒã«ãã¹ããã§ã¯ãªãïŒã¯ã©ã¹ãã¹ããèªã¿åãããåã¯ãã¹ãŠãååã®ãªãã¢ãžã¥ãŒã«ã«èªåçã«é
眮ãããŸããã€ãŸããååã®ãªãã¢ãžã¥ãŒã«ã®ãã¹ãŠã®åãã¯ã©ã¹ãã¹ãä»ããŠããŒããããŸãã ååã®ãªãã¢ãžã¥ãŒã«ã¯ä»ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ãèªã¿åããããã¯ã©ã¹ãã¹ãä»ããŠããŒããããä»»æã®ã¿ã€ããããšã¯ã¹ããŒãããããã¹ãŠã®ã¿ã€ããåç
§ã§ããŸãã Java 9ã§ã¯ãåŸæ¹äºææ§ãæäŸããããã«ãã¯ã©ã¹ãã¹ãšã¢ãžã¥ãŒã«ãã¹ã®äœ¿çšãåå¥ããã³å
±åã§ãµããŒããããŸãã ããã€ãã®äŸãèŠãŠã¿ãŸãããã
ãã¡ããšããzipvalidatorã¢ãžã¥ãŒã«ãããããã¢ãã¬ã¹ãã§ãã«ãŒã¯ãŸã ã¢ãžã¥ãŒã«åãããŠãããã
module-info.java
ããªããšã
module-info.java
module-info.java
ã ãœãŒã¹ã³ãŒãã®æ§é ã¯æ¬¡ã®ãšããã§ãã
one-module-with-unnamed-ok/ âââ classpath â âââ de.codecentric.legacy.addresschecker â âââ de â âââ codecentric â âââ legacy â âââ addresschecker â âââ api â â âââ AddressChecker.java â â âââ Run.java â âââ internal â âââ AddressCheckerImpl.java âââ modulepath â âââ de.codecentric.zipvalidator â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ api â â â âââ ZipCodeValidator.java â â â âââ ZipCodeValidatorFactory.java â â âââ internal â â âââ ZipCodeValidatorImpl.java â âââ module-info.java
ããã§ãzipvalidatorã«ã¢ã¯ã»ã¹ããããã®ã¬ã¬ã·ãŒã³ãŒããå«ãclasspathãã£ã¬ã¯ããªãšãzipvalidatorã¢ãžã¥ãŒã«ãå«ãmodulepathãã£ã¬ã¯ããªããããŸãã éåžžã©ããã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ã§ããŸãã ç¶æ¿ãããã³ãŒããã³ã³ãã€ã«ããã«ã¯ãã¢ãžã¥ã©ãŒã³ãŒãã«é¢ããæ
å ±ãæäŸããå¿
èŠããããŸãã ã¯ã©ã¹ãã¹ã«æžã蟌ãã ãã§ãïŒ
javac -d classpath/de.codecentric.legacy.addresschecker -classpath modulepath/de.codecentric.zipvalidator/ $(find classpath -name "*.java")
ãã¹ãŠãéåžžã©ããæ©èœããŸãã
å®è¡äžã«ã2ã€ã®å¯èœæ§ããããŸãã ããªãã¡ïŒ
- ã¢ãžã¥ãŒã«ãã¯ã©ã¹ãã¹ã«æžã蟌ã
- ã¯ã©ã¹ãžã®ãã¹ãšã¢ãžã¥ãŒã«ãžã®ãã¹ãæ··åšããã
æåã®ãªãã·ã§ã³ãéžæãããšãå®éã«ã¯ãã¢ãžã¥ã©ãŒã·ã¹ãã ãæŸæ£ããŸãã ååã®ãªãã¢ãžã¥ãŒã«ã§èšè¿°ãããã¹ãŠã®ã¿ã€ãã¯ãèªç±ã«çžäºã«é£çµ¡ã§ããããã«ãªããŸãã
java -cp modulepath/de.cc.zipvalidator/:classpath/de.cc.legacy.addresschecker/ de.codecentric.legacy.addresschecker.api.Run 76185
çŸåšäœ¿çšããŠããJavaã¢ããªã±ãŒã·ã§ã³ãšãŸã£ããåãããã«æ©èœããŸãã
äžæ¹ãã¢ãžã¥ãŒã«ãã¹ãšã¯ã©ã¹ãã¹ã®æ··å䜿çšã¯æ¬¡ã®ããã«æ©èœããŸãã
java -modulepath modulepath -addmods de.codecentric.zipvalidator -classpath classpath/de.codecentric.legacy.addresschecker/ de.codecentric.legacy.addresschecker.api.Run
2ã€ã®ã¹ã€ãããåæã«äœ¿çšããŸãïŒ
-classpath
-classpath
ããã³
-modulepath
-modulepath
ã
-addmods
ã¹ã€ããã远å
-addmods
-ã¯ã©ã¹ãžã®ãã¹ãšã¢ãžã¥ãŒã«ãžã®ãã¹ãæ··åšãããå Žåãmodulepathãã£ã¬ã¯ããªå
ã®ã¢ãžã¥ãŒã«ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããããã©ã®ã¢ãžã¥ãŒã«ã䜿çšå¯èœã«ããããæç€ºçã«æå®ããå¿
èŠããããŸãã
ãã®ã¢ãããŒããæ£åžžã«æ©èœããŸãããåé¡ããããŸãïŒ ãååã®ãªãã¢ãžã¥ãŒã«ã«å¿
èŠãªãã®ããšãã質åã«å¯Ÿããçãã¯ããä»ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ãã§ããããšãå¿ããªãã§ãã ããã modulepathãä»ããŠzipvalidatorã¢ãžã¥ãŒã«ã䜿çšããå Žåããšã¯ã¹ããŒããããããã±ãŒãžã®ã¿ã䜿çšã§ããŸãã ãã以å€ã¯ãã¹ãŠãå®è¡æã«IllegalAccessErrorã«ãªããŸãã ãããã£ãŠããã®å Žåãã¢ãžã¥ãŒã«ã·ã¹ãã ã®ã«ãŒã«ã«åŸãå¿
èŠããããŸãã
jlinkã䜿çšããŠã©ã³ã¿ã€ã ã€ã¡ãŒãžãäœæããã¢ãžã¥ãŒã«ã«é¢ããååãªäŸ; 泚ç®ã«å€ããå¥ã®æ°ããããŒã«ãç»å ŽããŸããã
jlink
ç¬èªã®JVMãã£ã¹ããªãã¥ãŒã·ã§ã³ãäœæããããã®Java 9ãŠãŒãã£ãªãã£ã§ãã æãè峿·±ãã®ã¯ãJDKã®æ°ããã¢ãžã¥ã©ãŒã¢ãŒããã¯ãã£ã®ãããã§ããã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«å«ããã¢ãžã¥ãŒã«ãéžæã§ããããšã§ãã äŸãèããŠã¿ãŸãããã ã¢ãã¬ã¹ãã§ãã«ãŒãå«ãã©ã³ã¿ã€ã ã€ã¡ãŒãžãäœæããå Žåã¯ã次ã®ã³ãã³ããæå®ããŸãã
jlink --modulepath $JAVA9_BIN/../../images/jmods/:two-modules-ok/ --addmods de.codecentric.addresschecker --output linkedjdk
次ã®3ã€ã ãã瀺ããŸãã
- ã¢ãžã¥ãŒã«ãžã®ãã¹ïŒç¹å¥ãªã¢ãžã¥ãŒã«ãšJDKã®jmodsãã£ã¬ã¯ããªãžã®ãã¹ãå«ã-ããã«æšæºã®Javaã¢ãžã¥ãŒã«ããããŸãïŒ
- ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«å«ããã¢ãžã¥ãŒã«
- åºåãã£ã¬ã¯ããª
ãã®ã³ãã³ãã¯ãæ¬¡ã®æ§é ãäœæããŸãã
linkedjdk /
âââãã³
ââââjava
ââââkeytool
âââconf
âââânet.properties
ââââã»ãã¥ãªãã£
ââââjava.policy
ââââjava.security
âââlib
âââã¯ã©ã¹ãªã¹ã
âââjli
â âââ libjli.dylib âââ jspawnhelper âââ jvm.cfg âââ libjava.dylib âââ libjimage.dylib âââ libjsig.diz âââ libjsig.dylib âââ libnet.dylib âââ libnio.dylib âââ libosxsecurity.dylib âââ libverify.dylib âââ libzip.dylib âââ modules â âââ bootmodules.jimage âââ security â âââ US_export_policy.jar â âââ blacklisted.certs â âââ cacerts â âââ local_policy.jar âââ server â âââ Xusage.txt â âââ libjsig.diz â âââ libjsig.dylib â âââ libjvm.diz â âââ libjvm.dylib âââ tzdb.dat
以äžã§ãã OSX Mavericksã§ã¯ãããã«ã¯çŽ47 MBââããããŸãã ãŸããã¢ãŒã«ã€ããæå¹ã«ããŠãæ¬çªç°å¢ã§ã¯ãŸã å¿
èŠãªããããã°æ©èœãåé€ããããšãã§ããŸãã ç§ãäœæã§ããæãã³ã³ãã¯ããªãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯ã次ã®ã³ãã³ãã§ååŸãããŸããã
jlink --modulepath $JAVA9_BIN/../../images/jmods/:two-modules-ok/bin --addmods de.codecentric.addresschecker --output linkedjdk --exclude-files *.diz --compress-resources on --strip-java-debug on --compress-resources-level 2
ç§ã®æèŠã§ã¯ããã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãµã€ãºã¯çŽ18 MBã«çž®å°ãããŠããŸã-ãã°ãããã§ãã Linuxã§ã¯ããããã13ãŸã§çž®å°ã§ããŸãã
é話äž
/bin/java --listmods
ãã®é
åžã«å«ãŸããã¢ãžã¥ãŒã«ã®ãªã¹ãã衚瀺ãããŸãã
de.codecentric.addresschecker de.codecentric.zipvalidator java.base@9.0
ãããã£ãŠããããã®ã¢ãžã¥ãŒã«ã®æå€§æ°ã«äŸåãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã®JVMã§å®è¡ã§ããŸãã ãããããã®ã¹ã¯ãªãããå®è¡ããã¡ã€ã³ã¯ã©ã¹ãååŸã§ããŸããã§ããã ãã®ããã«ãç§ã¯å察ã«è¡ããŸããã
æ³šææ·±ãèªè
ã¯ã2çªç®ã®åŒã³åºããjlinkã«å¯ŸããŠè¡ããããããžã®ã¢ãžã¥ãŒã«ãžã®ãã¹ãæåã®åŒã³åºãäžãšç°ãªãããšã«æ°ä»ãããšããããŸãã 2çªç®ã®ã±ãŒã¹ã§ã¯ãbinãã£ã¬ã¯ããªãžã®ãã¹ãæå®ããŸãã ãã®ãã£ã¬ã¯ããªã«ã¯ã¢ãžã¥ã©ãŒjarãã¡ã€ã«ãå«ãŸããaddresscheckerã®jarã«ã¯ããããã§ã¹ãå
ã®ã¡ã€ã³ã¯ã©ã¹ã«é¢ããæ
å ±ãå«ãŸããŸãã jlinkãŠãŒãã£ãªãã£ã¯ãã®æ
å ±ã䜿çšããŠãJVM binãã£ã¬ã¯ããªã«è¿œå æ
å ±ã远å ããŸãã
linkedjdk/ âââ bin â âââ de.codecentric.addresschecker â âââ java â âââ keytool ...
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ãçŽæ¥åŒã³åºãããšãã§ããŸãã çŸäººïŒ
./linkedjdk/bin/de.codecentric.addresschecker 76185
ãã£ã¹ãã¬ã€
76185 is a valid zip code
ãããã«ããã§ãžã°ãœãŒãšã®ç¥ãåãã¯çµãããŸããã JigsawãšJava 9ã§ã§ããããšãšã§ããªãããšã瀺ãäžé£ã®äŸãèŠãŠããŸãããJigsawã«ã¯ãã©ã ãåŒã
try-with
ãªãœãŒã¹ã䜿çšããŠç°¡åã«è£åã§ããªãåºæ¬çãªå€æŽãå°å
¥ãããŠããŸãã
try-with
ã MavenãGradleãªã©ã®ã¢ã»ã³ããªããŒã«ããIDEãŸã§ã®ããŒã«ãã§ãŒã³å
šäœãã¢ãžã¥ã©ãŒã·ã¹ãã ã«é©åãããå¿
èŠããããŸãã JavaOneã«ã³ãã¡ã¬ã³ã¹ã§ãGradle Inc.ã®Hans Docter Java 8以åã§ãã¢ãžã¥ã©ãŒã³ãŒãã®èšè¿°ãéå§ããæ¹æ³ã«é¢ããã¬ããŒããèªã¿ãŸããã Gradleã¯ã³ã³ãã€ã«æã«ãã§ãã¯ããã¢ãžã¥ãŒã«ã®æŽåæ§ãæãªããããšå€±æããŸãã ãã®ïŒå®éšçïŒæ©èœã¯ã
Gradle 2.9ã®ææ°ãªãªãŒã¹ã«å«ãŸããŠããŸããã é¢çœãæéãééããªãåŸ
ã£ãŠããŸãïŒ
Jigsawã®ãã詳现ãªç޹ä»ã«ã€ããŠã¯ã
Jigsaw ProjectããŒã ããŒãžãç¹ã«ææ°ã®JavaOneäŒè°ã®Jigsawã«é¢ãã
ã¹ã©ã€ããšãããªã¬ããŒãããå§ãããŸãã