ãã¯ãããããã«ïŒ
æ¬ã
JavaãA New Generation of Development ã以æ¥ãç§ãã¡ã¯ã
Project Jigsaw ããšããäžè¬åã§çµ±äžããããã®èšèªã®é·å¹Žçºè¡šãããæ°æ©èœã®éçºãè¿œã£ãŠããŸããã æ¬æ¥ã11æ24æ¥ã®èšäºã®ç¿»èš³ãæäŸããŸããããã«ãããJigsawãJava 9ã§è¡ãããããšãååã«ç¢ºä¿¡ã§ããŸãã
Jigsawãããžã§ã¯ããéå§ãããŠãã8幎ãçµéããŸãããJigsawãããžã§ã¯ãã®ã¿ã¹ã¯ã¯ãJavaãã©ãããã©ãŒã ãã¢ãžã¥ãŒã«åããå
±éã¢ãžã¥ãŒã«ã·ã¹ãã ã®å®è£
ã«éçŽããããšã§ãã
Jigsawã¯Java 9ã§æåã«ç»å Žããäºå®ã§ãã ãã®ãªãªãŒã¹ã¯ã以åã¯Java 7ãšJava 8ã®äž¡æ¹ã§èšç»ãããŠããŸãããJigsawã®ç¯å²ãäœåºŠãå€æŽãããŠããŸãã JavaOne 2015ã«ã³ãã¡ã¬ã³ã¹ã®Oracleãã¬ããªãŒã§å€ãã®æ³šç®ãéããJigsawãšããã®ãããã¯ã«é¢ãã
ããã€ãã®ã¹ããŒãã
äžåºŠã«è¡ããããããJigsawã®æºåãã»ãŒå®äºãããšä¿¡ããããããçç±ããããŸãã ããã¯ããªãã«ãšã£ãŠäœãæå³ããŸããïŒ Jigsawãããžã§ã¯ããšã¯äœã§ããïŒ
ããã¯ãã¢ãžã¥ãŒã«ã·ã¹ãã ãç°¡åã«çŽ¹ä»ããå€æ°ã®ã³ãŒãäŸã䜿çšããŠJigsawã®åäœãå®èšŒããã2ã€ã®åºçç©ã®æåã®ãã®ã§ãã æåã®éšåã§ã¯ãã¢ãžã¥ãŒã«ã®ã·ã¹ãã ãšã¯äœããJDKãã©ã®ããã«ã¢ãžã¥ãŒã«åãããŠããããè°è«ããç¹å®ã®ç¶æ³ã§ã®ã³ã³ãã€ã©ãšã©ã³ã¿ã€ã ã®åäœã«ã€ããŠãæ€èšããŸãã
ã¢ãžã¥ãŒã«ãšã¯äœã§ããïŒ
ã¢ãžã¥ãŒã«ãèšè¿°ããã®ã¯ç°¡åã§ããããã¯ããã°ã©ã å
ã®ãŠãããã§ãããåã¢ãžã¥ãŒã«ã«ã¯3ã€ã®è³ªåã«å¯Ÿããåçãããã«å«ãŸããŠããŸãã ãããã®åçã¯
module-info.java
ãã¡ã€ã«ã«èšé²ãããŸã
module-info.java
module-info.java
åã¢ãžã¥ãŒã«ãæã£ãŠããŸãã
- ã¢ãžã¥ãŒã«ã®ååã¯äœã§ããïŒ
- 圌ã¯äœããšã¯ã¹ããŒãããŸããïŒ
- ããã«ã¯äœãå¿
èŠã§ããïŒ
ã·ã³ãã«ãªã¢ãžã¥ãŒã«æåã®è³ªåã«å¯Ÿããçãã¯ç°¡åã§ãã ïŒã»ãŒïŒãã¹ãŠã®ã¢ãžã¥ãŒã«ã«ã¯ååããããŸãã
de.codecentric.mymodule
ãªã©ã®ããã±ãŒãžåœåèŠåã«æºæ ããå¿
èŠããããŸã
de.codecentric.mymodule
ã競åãé¿ããããã
2çªç®ã®è³ªåã«çããããã«ãã¢ãžã¥ãŒã«ã¯ãã®ç¹å®ã®ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®
ããã±ãŒãžã®ãªã¹ããæäŸããŸãããããã®
ããã±ãŒãžã¯ãããªãã¯APIãšèŠãªããããããä»ã®ã¢ãžã¥ãŒã«ã§äœ¿çšã§ããŸãã ã¯ã©ã¹ããšã¯ã¹ããŒããããããã±ãŒãžã§ãªãå Žåã¯ãããšããããªãã¯ã§ãã£ãŠããã¢ãžã¥ãŒã«ã®å€éšãã誰ãã¢ã¯ã»ã¹ã§ããŸããã
3çªç®ã®è³ªåã«å¯Ÿããçãã¯ããã®ã¢ãžã¥ãŒã«ãäŸåãã
ã¢ãžã¥ãŒã«ã®ãªã¹ãã§ãã ãããã®ã¢ãžã¥ãŒã«
ã«ãã£ãŠãšã¯ã¹ããŒãããããã¹ãŠã®ãããªãã¯ã¿ã€ãã¯ãäŸåã¢ãžã¥ãŒã«ããã¢ã¯ã»ã¹å¯èœã§ãã JigsawããŒã ã¯ãã
read ããšããå¥ã®ã¢ãžã¥ãŒã«ãšããçšèªãå°å
¥ããããšããŠããŸãã
ããã¯çŸç¶ã®å€§ããªå€åã§ãã Java 8ãŸã§ã¯ãã¯ã©ã¹ãžã®ãã¹ã«ãããã¹ãŠã®ãããªãã¯ã¿ã€ãã¯ãä»ã®ã¿ã€ãã§äœ¿çšã§ããŸããã Jigsawã®åºçŸã«ãããJavaã¿ã€ãã®ã¢ã¯ã»ã·ããªãã£ã·ã¹ãã ã¯
- å
Ž
- ãã©ã€ããŒã
- ããã©ã«ã
- ä¿è·ããã
ã«
- ãã®ã¢ãžã¥ãŒã«ãèªãã§ãã人ã«å
¬éïŒãšã¯ã¹ããŒãïŒ
- ãããèªãã§ããããã€ãã®ã¢ãžã¥ãŒã«ã«ã€ããŠã¯publicïŒãšã¯ã¹ããŒããããã«ã€ããŠã¯ç¬¬2éšã§èª¬æããŸãïŒ
- ãã®ã¢ãžã¥ãŒã«å
ã®ä»ã®ã¯ã©ã¹ã«ã¯public
- ãã©ã€ããŒã
- ããã©ã«ã
- ä¿è·ããã
ã¢ãžã¥ãŒã«åãããJDKã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ã¯é埪ç°ã°ã©ãã圢æãã埪ç°äŸåé¢ä¿ãåé¿ããå¿
èŠããããŸãã ãã®ååãå®è£
ããããã«ãJigsawããŒã ã¯æ¬¡ã®å€§ããªåé¡ã解決ããå¿
èŠããããŸãããã¢ãžã¥ãŒã«ã«äŸµå
¥ããJavaã©ã³ã¿ã€ã ç°å¢ã¯ãå ±åãããŠããããã«ã埪ç°çããã³éè«ççãªäŸåé¢ä¿ã§ãã£ã±ãã§ãã çµæã¯
ã°ã©ãã§ãïŒ

ã°ã©ãã®ããŒã¹ã¯java.baseã§ãã ããã¯ãçä¿¡ãšããžã®ã¿ãæã€å¯äžã®ã¢ãžã¥ãŒã«ã§ãã äœæããåã¢ãžã¥ãŒã«ã¯
java.base
ã
èªã¿åã java.base
java.base
宣èšãããã©ãã-æé»ã®æ¡åŒµ
java.lang.Object
ãšåæ§
java.lang.Object
ã
java.base
java.lang
ãªã©ã®ããã±ãŒãžããšã¯ã¹ããŒãããŸã
java.lang
ã
java.util
java.util
ã
java.math
java.math
ãªã©
JDKã®ã¢ãžã¥ãŒã«åã«ããã䜿çšããJavaã©ã³ã¿ã€ã ã¢ãžã¥ãŒã«ãæå®ã§ããããã«ãªããŸããã ãããã£ãŠã
java.desktop
ã¢ãžã¥ãŒã«ãèªãŸãªãéããã¢ããªã±ãŒã·ã§ã³ã¯SwingãŸãã¯CorbaããµããŒãããç°å¢ã䜿çšããªãã§ãã ããã
java.desktop
ãŸãã¯
java.corba
java.corba
ã ãã®ãããªããªãã³ã°ãããç°å¢ã®äœæã«ã€ããŠã¯ã第2éšã§èª¬æããŸãã
ããããããªããã©ã€ãªçè«...
ãããã³ãã®èšäºã®ãã¹ãŠã®ã³ãŒãã¯ããµã³ãã«ã®ã³ã³ãã€ã«ãããã±ãŒãžåãå®è¡çšã®ã·ã§ã«ã¹ã¯ãªãããå«ãã
ããããå
¥æã§ã
ãŸã ã
ããã§æ€èšããå®éçãªã±ãŒã¹ã¯éåžžã«åçŽã§ãã ã¢ãžã¥ãŒã«
de.codecentric.zipvalidator
ããããŸã
de.codecentric.zipvalidator
éµäŸ¿çªå·ã®ç¹å®ã®æ€èšŒãå®è¡ããŸãã ãã®ã¢ãžã¥ãŒã«ã¯
de.codecentric.addresschecker
ã¢ãžã¥ãŒã«ã«ãã£ãŠèªã¿åãããŸã
de.codecentric.addresschecker
ïŒéµäŸ¿çªå·ã ãã§ãªããããã§ã¯è€éåããªãããã«ãããè¡ããŸããïŒã
zipããªããŒã¿ãŒã¯ã次ã®
module-info.java
ãã¡ã€ã«ã§èª¬æãããŠããŸã
module-info.java
ïŒ
module de.codecentric.zipvalidator {
de.codecentric.zipvalidator.apiããšã¯ã¹ããŒãããŸãã
}
ãããã£ãŠããã®ã¢ãžã¥ãŒã«ã¯ããã±ãŒãž
de.codecentric.zipvalidator.api
ãšã¯ã¹ããŒãããŸã
de.codecentric.zipvalidator.api
ãŸããä»ã®ã¢ãžã¥ãŒã«ã¯èªã¿åããŸããïŒ
java.base
ãé€ã
java.base
ïŒ ãã®ã¢ãžã¥ãŒã«ã¯ãã¢ãã¬ã¹ãã§ãã«ãŒã«ãã£ãŠèªã¿åãããŸãã
module de.codecentric.addresschecker{ exports de.codecentric.addresschecker.api; requires de.codecentric.zipvalidator; }
ãã¡ã€ã«ã·ã¹ãã ã®äžè¬çãªæ§é ã¯æ¬¡ã®ãšããã§ãã
two-modules-ok/ âââ de.codecentric.addresschecker â âââ de â â âââ codecentric â â âââ addresschecker â â âââ api â â â âââ AddressChecker.java â â â âââ Run.java â â âââ internal â â âââ AddressCheckerImpl.java â âââ module-info.java âââ de.codecentric.zipvalidator â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ api â â â âââ ZipCodeValidator.java â â â âââ ZipCodeValidatorFactory.java â â âââ internal â â â âââ ZipCodeValidatorImpl.java â â âââ model â âââ module-info.java
ã¢ãžã¥ãŒã«ã¯ããã®ã¢ãžã¥ãŒã«ãšåãååã®ãã£ã¬ã¯ããªã«é
眮ããããšããåæããããŸãã
æåã®äŸã§ã¯ããã¹ãŠãçŽ æŽãããèŠããŸããã«ãŒã«ãš
AddressCheckerImpl
ã¯ã©ã¹ã§å³å¯ã«åäœããŸã
AddressCheckerImpl
ZipCodeValidator
ã®ã¿ã«ã¢ããŒã«ã
ZipCodeValidator
ZipCodeValidator
ããã³
ZipCodeValidatorFactory
ZipCodeValidatorFactory
ãšã¯ã¹ããŒããããããã±ãŒãžããïŒ
public class AddressCheckerImpl implements AddressChecker { @Override public boolean checkZipCode(String zipCode) { return ZipCodeValidatorFactory.getInstance().zipCodeIsValid(zipCode); } }
ããã§
javac
å®è¡ããŸã
javac
ãã€ãã³ãŒããçæããŸãã
zipvalidator
ãã³ã³ãã€ã«ããã«ã¯
zipvalidator
ïŒãã¡ãããã¢ãã¬ã¹ãã§ãã«ãŒãzipvalidatorãèªã¿åããããæåã«è¡ãå¿
èŠããããŸãïŒ
javac -d de.codecentric.zipvalidator \ $(find de.codecentric.zipvalidator -name "*.java")
zipvalidatorã¯ãŠãŒã¶ãŒã¢ãžã¥ãŒã«ã«äŸåããªããããã¢ãžã¥ãŒã«ã®è©±ã¯ãŸã ãããŸããã
find
find
.java
ãã¡ã€ã«ã®ãªã¹ããäœæããã®ã«åœ¹ç«ã¡ãŸã
.java
æå®ããããã£ã¬ã¯ããªå
ã
ãããã
javac
ã«äŒããããã«
javac
ã¢ãžã¥ãŒã«ã®æ§é ã«ã€ããŠãã³ã³ãã€ã«æã« ãããè¡ãã«ã¯ãjigsawã«ã¹ã€ãããå
¥åããŸã
modulepath
modulepath
ãŸãã¯
-mp
-mp
ã
ã¢ãã¬ã¹ãã§ãã«ãŒãã³ã³ãã€ã«ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
javac -modulepathã -d de.codecentric.addresschecker \
$ïŒde.codecentric.addresschecker -name "* .java"ãèŠã€ããŸãïŒ
modulepathã䜿çšããŠãjavacã«ã³ã³ãã€ã«æžã¿ã¢ãžã¥ãŒã«ïŒãã®å Žåã¯ããïŒã®å Žæãæ瀺ããŸããã¯ã©ã¹ãã¹ã¹ã€ããã«äŒŒããã®ãååŸããŸãã
ãã ããè€æ°ã®ã¢ãžã¥ãŒã«ãåå¥ã«ã³ã³ãã€ã«ããã®ã¯å°ãé¢åãªããã§ã-ä»ã®-modulesourcepathã¹ã€ããã䜿çšããŠè€æ°ã®ã¢ãžã¥ãŒã«ãäžåºŠã«ã³ã³ãã€ã«ããæ¹ãè¯ãã§ãããïŒ
javac -d . -modulesourcepath . $(find . -name "*.java")
ãã®ã³ãŒãã¯ããã¹ãŠã®ãµããã£ã¬ã¯ããªãæ€çŽ¢ããŸãã ã¢ãžã¥ãŒã«ã®ãã£ã¬ã¯ããªãã¢ãžã¥ãŒã«ã«å«ãŸãããã¹ãŠã®Javaãã¡ã€ã«ãã³ã³ãã€ã«ããŸãã
ãã¹ãŠãã³ã³ãã€ã«ããããèªç¶ã«äœãèµ·ãã£ãã®ãè©ŠããŠã¿ããïŒ
java -mp . -m de.codecentric.addresschecker/de.codecentric.addresschecker.api.Run 76185
ç¹°ãè¿ããŸãããã¢ãžã¥ãŒã«ãžã®ãã¹ã瀺ããã³ã³ãã€ã«ãããã¢ãžã¥ãŒã«ã®å ŽæãJVMã«äŒããŸãã ãŸããã¡ã€ã³ã¯ã©ã¹ïŒããã³ãã©ã¡ãŒã¿ãŒïŒãèšå®ããŸãã
ãããçµè«ã¯ããã ïŒ
76185 is a valid zip code
ã¢ãžã¥ã©ãŒãžã£ãŒãåãã®ãšãããJavaã®äžçã§ã¯ãjarãã¡ã€ã«ã§ãã€ãã³ãŒããéåä¿¡ããããšã«æ
£ããŠããŸãã Jigsawã¯ãã¢ãžã¥ãŒã«åŒjarã®æŠå¿µãå°å
¥ããŠããŸãã
ã¢ãžã¥ã©ãŒjarã¯éåžžã®
jarã«éåžžã«äŒŒãŠããŸãããã³ã³ãã€ã«ããã
module-info.class.
ãå«ãŸããŠã
module-info.class.
module-info.class.
ãããã®ãã¡ã€ã«ãç®çã®ã¿ãŒã²ããããŒãžã§ã³çšã«ã³ã³ãã€ã«ãããŠããå Žåããããã®ã¢ãŒã«ã€ãã«ã¯äžäœäºææ§ããããŸãã
module-info.java
æå¹ãªååã§ã¯ãªããããã³ã³ãã€ã«ããã
module-info.class
module-info.class
å€ãJVMã§ã¯ç¡èŠãããŸãã
zipvalidatorã®jarãäœæããã«ã¯ã次ã®ããã«èšè¿°ããŸãã
jar --create --file bin/zipvalidator.jar \ --module-version=1.0 -C de.codecentric.zipvalidator
ã
åºåãã¡ã€ã«ãããŒãžã§ã³ïŒå®è¡æã®Jigsawã§ã®ã¢ãžã¥ãŒã«ã®ããã€ãã®ããŒãžã§ã³ã®äœ¿çšã¯åå¥ã«æå®ãããŠããŸãããïŒãããã³ããã±ãŒãžåãããã¢ãžã¥ãŒã«ã瀺ããŸãã
addresscheckerã«ã¯ã¡ã€ã³ã¯ã©ã¹ããããããæå®ã§ããŸãã
jar --create --file=bin/addresschecker.jar --module-version=1.0 \ --main-class=de.codecentric.addresschecker.api.Run \ -C de.codecentric.addresschecker .
ã¡ã€ã³ã¯ã©ã¹ã¯
module-info.java
æå®ãããŠããŸãã
module-info.java
ããæ³åã®ãšããïŒæåã¯JigsawããŒã ãããããäºå®ã§ããïŒããéåžžã¯ãããã§ã¹ãã«èšè¿°ãããŠããŸãã
ãã®äŸãå®è¡ãããš
java -mp bin -m de.codecentric.addresschecker 76185
åã®å ŽåãšåãçããåŸãããŸãã åã³ã¢ãžã¥ãŒã«ãžã®ãã¹ãæå®ããŸãããã®å Žåãjarãæžã蟌ãã binãã£ã¬ã¯ããªã«ç§»åããŸãã addresschecker.jarãããã§ã¹ãã«ã¯ãã§ã«ãã®æ
å ±ããããããã¡ã€ã³ã¯ã©ã¹ãæå®ããå¿
èŠã¯ãããŸããã ã¢ãžã¥ãŒã«åã
-m
ã¹ã€ããã«æå®ããã ãã§ã
-m
ã
ãããŸã§ã®ãšããããã¹ãŠãç°¡åã§å¿«é©ã§ãã 次ã«ãã¢ãžã¥ãŒã«ãå°ãããã£ãŠãç¡ç§©åºã«ãªãå§ããå Žåã®ã³ã³ãã€ã«ãšå®è¡äžã®ãžã°ãœãŒã®åäœãèŠãŠã¿ãŸãããã
ãšã¯ã¹ããŒããããŠããªãã¿ã€ãã®äœ¿çšãã®äŸã§ã¯ã䜿çšããŠã¯ãªããªãå¥ã®ã¢ãžã¥ãŒã«ããåã«ã¢ã¯ã»ã¹ãããšã©ããªãããèŠãŠã¿ãŸãããã
AddressCheckerImpl
ãã®ãã¡ã¯ããªãŒã«é£œã飜ãããŠãããã
AddressCheckerImpl
ãå®è£
ãå€æŽããŸã
return new ZipCodeValidatorImpl().zipCodeIsValid(zipCode);
ã³ã³ãã€ã«ããããšãããšãæåŸ
ã©ããã«ãªããŸã
error: ZipCodeValidatorImpl is not visible because package de.codecentric.zipvalidator.internal is not visible
ãã®ãããã³ã³ãã€ã«æã«ãšã¯ã¹ããŒããããªãåã䜿çšãããšæ©èœããŸããã
ããããç§ãã¡ã¯è³¢ã人ãªã®ã§ãå°ãããŸãããŠãªãã¬ã¯ã·ã§ã³ã䜿çšããŸãã
ClassLoader classLoader = AddressCheckerImpl.class.getClassLoader(); try { Class aClass = classLoader.loadClass("de.[..].internal.ZipCodeValidatorImpl"); return ((ZipCodeValidator)aClass.newInstance()).zipCodeIsValid(zipCode); } catch (Exception e) { throw new RuntimeException(e); }
å®å
šã«ã³ã³ãã€ã«ããããå®è¡ããŸãããã ããããããããžã°ãœãŒãã ãŸãã®ã¯ç°¡åã§ã¯ãããŸããã
java.lang.IllegalAccessException: class de.codecentric.addresschecker.internal.AddressCheckerImpl (in module de.codecentric.addresschecker) cannot access class [..].internal.ZipCodeValidatorImpl (in module de.codecentric.zipvalidator) because module de.codecentric.zipvalidator does not export package de.codecentric.zipvalidator.internal to module de.codecentric.addresschecker
ãããã£ãŠãJigsawã«ã¯ãã³ã³ãã€ã«æã ãã§ãªããå®è¡æã®ãã§ãã¯ãå«ãŸããŸãïŒ ãããŠãç§ãã¡ãééã£ãããšãéåžžã«æ確ã«æããŠãããŸãã
埪ç°äŸå次ã®å Žåãã¢ãã¬ã¹ãã§ãã«ãŒã¢ãžã¥ãŒã«APIã«zipvalidatorã䜿çšã§ããã¯ã©ã¹ãå«ãŸããŠããããšãçªç¶ããããŸããã æ zyãªã®ã§ãã¯ã©ã¹ãå¥ã®ã¢ãžã¥ãŒã«ã«ãªãã¡ã¯ã¿ãªã³ã°ãã代ããã«ãaddresscheckerã®äŸåé¢ä¿ã宣èšããŸãã
module de.codecentric.zipvalidator{ requires de.codecentric.addresschecker; exports de.codecentric.zipvalidator.api; }
埪ç°çãªäŸåé¢ä¿ã¯å®çŸ©äžçŠæ¢ãããŠãããããã³ã³ãã€ã©ã¯ç§ãã¡ã®éªéã«ãªããŸãïŒå
±éã®ç®çã®ããïŒã
./de.codecentric.zipvalidator/module-info.java:2: error: cyclic dependence involving de.codecentric.addresschecker
ãããè¡ãããšã¯ã§ããŸãããã³ã³ãã€ã«äžã§ãã£ãŠããäºåã«èŠåãããŸãã
æé»ã®èªã¿ãããæ©èœãæ¡åŒµããããã«ãæ°ããã¢ãžã¥ãŒã«
de.codecentric.zipvalidator.model
å°å
¥ããŠzipvalidatorãç¶æ¿ããããšã«ããŸãã
de.codecentric.zipvalidator.model
劥åœãªããŒã«å€ã ãã§ãªããæ€èšŒçµæã®ç¹å®ã®
ã¢ãã«ãå«ãŸããŠããŸãã æ°ãããã¡ã€ã«æ§é ã¯æ¬¡ã®ãšããã§ãã
three-modules-ok/ âââ de.codecentric.addresschecker â âââ de â â âââ codecentric â â âââ addresschecker â â âââ api â â â âââ AddressChecker.java â â â âââ Run.java â â âââ internal â â âââ AddressCheckerImpl.java â âââ module-info.java âââ de.codecentric.zipvalidator â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ api â â â âââ ZipCodeValidator.java â â â âââ ZipCodeValidatorFactory.java â â âââ internal â â âââ ZipCodeValidatorImpl.java â âââ module-info.java âââ de.codecentric.zipvalidator.model â âââ de â â âââ codecentric â â âââ zipvalidator â â âââ model â â âââ api â â âââ ZipCodeValidationResult.java â âââ module-info.java
ã¯ã©ã¹
ZipCodeValidationResult
ZipCodeValidationResult
-ãçããããããé·ãããããªã©ã®åœ¢åŒã®ã€ã³ã¹ã¿ã³ã¹ãæã€åçŽãªåæ
ã¯ã©ã¹
module-info.java
module-info.java
ãã®ããã«ç¶æ¿ããŸããïŒ
module de.codecentric.zipvalidator{ exports de.codecentric.zipvalidator.api; requires de.codecentric.zipvalidator.model; }
ããã§ãZipCodeValidatorã®å®è£
ã¯æ¬¡ã®ããã«ãªããŸãã
@Override public <strong>ZipCodeValidationResult</strong> zipCodeIsValid(String zipCode) { if (zipCode == null) { return ZipCodeValidationResult.ZIP_CODE_NULL; [snip] } else { return ZipCodeValidationResult.OK; } }
addresscheckerã¢ãžã¥ãŒã«ã¯ãæ»ãå€ã®åãšããŠåæåãååŸã§ããããã«ãªããŸããã®ã§ãç¶è¡ã§ããŸããïŒ ããïŒ ã³ã³ãã€ã«ã®çµæïŒ
./de.codecentric.addresschecker/de/[..]/internal/AddressCheckerImpl.java:5: error: ZipCodeValidationResult is not visible because package de.codecentric.zipvalidator.model.api is not visible
ã¢ãã¬ã¹ãã§ãã«ãŒã®ã³ã³ãã€ã«äžã«ãšã©ãŒãçºçããŸãã-zipvalidatorã¯ãå
¬éAPIã§zipvalidatorã¢ãã«ãããšã¯ã¹ããŒããããã¿ã€ãã䜿çšããŸãã ã¢ãã¬ã¹ãã§ãã«ãŒã¯ãã®ã¢ãžã¥ãŒã«ãèªã¿åããªãããããã®ã¿ã€ãã«ã¢ã¯ã»ã¹ã§ããŸããã
ãã®åé¡ã«ã¯2ã€ã®è§£æ±ºçããããŸãã æããã«ïŒã¢ãã¬ã¹ãã§ãã«ãŒããzipvalidatorã¢ãã«ã«èªã¿åããšããžãè¿œå ããŸãã ãã ããããã¯æ»ããããåŸé
ã§ããzipvalidatorã§ã®äœæ¥ã«ã®ã¿å¿
èŠãªå Žåããªããã®äŸåé¢ä¿ã宣èšããå¿
èŠãããã®ã§ããããã zipvalidatorã¯ãå¿
èŠãªãã¹ãŠã®ã¢ãžã¥ãŒã«ã«ã¢ã¯ã»ã¹ã§ããããšãä¿èšŒãã¹ãã§ã¯ãããŸãããïŒ ãã¹ãã§ãããããããªã-ããã§ç§ãã¡ã¯æé»ã®èªã¿ãããã«ãªããŸãã publicããŒã¯ãŒããå¿
èŠãªå®çŸ©ã«è¿œå ããããšã«ããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¢ãžã¥ãŒã«ã«å¥ã®ã¢ãžã¥ãŒã«ãèªã¿èŸŒãå¿
èŠãããããšãäŒããŸãã äŸãšããŠãæŽæ°ããã
module-info.java
ã¯ã©ã¹ãèããŸã
module-info.java
zipvalidatorïŒ
module de.codecentric.zipvalidator{ exports de.codecentric.zipvalidator.api; requires public de.codecentric.zipvalidator.model; }
public
ããŒã¯ãŒã
public
zipvalidatorãèªã¿åããã¹ãŠã®ã¢ãžã¥ãŒã«ã«ãã¢ãã«ãèªã¿åãå¿
èŠãããããšãäŒããŸãã ã¯ã©ã¹ãã¹ãå¥ã®æ¹æ³ã§æäœããå¿
èŠããããŸãããããšãã°ããã¹ãŠã®äŸåé¢ä¿ãã¯ã©ã€ã¢ã³ãããã¢ã¯ã»ã¹å¯èœã§ããããšãä¿èšŒããå¿
èŠãããå ŽåãMaven POMã«äŸåã§ããŸããã§ããã ãããå®çŸããã«ã¯ããããªãã¯APIã®äžéšã§ããå Žåã¯æ瀺çã«æå®ããå¿
èŠããããŸããã ããã¯éåžžã«çŸããã¢ãã«ã§ããã¯ã©ã¹å
ã§ã®ã¿äŸåé¢ä¿ã䜿çšããå Žåãã¯ã©ã€ã¢ã³ãã«ãšã£ãŠéèŠãªããšã¯äœã§ããïŒ ãŸããã¯ã©ã¹å€ã§äœ¿çšããå Žåã¯ãçŽæ¥å ±åããå¿
èŠããããŸãã
ãŸãšãããã§æåã®éšåã¯çµãããŸããã ã¢ãžã¥ãŒã«ããšã«åçããå¿
èŠããã3ã€ã®è³ªåãšãJavaã©ã³ã¿ã€ã ã®ã¢ãžã¥ãŒã«åã«ã€ããŠèª¬æããŸããã 次ã«ã2ã€ã®ã¢ãžã¥ãŒã«ã§æ§æãããåçŽãªJavaã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ãèµ·åãããã³ããã±ãŒãžåããäŸãèŠãŠã¿ãŸããã 次ã«ãå®éã®äŸã䜿çšããŠã確ç«ãããã«ãŒã«ã®éåã«ã¢ãžã¥ãŒã«ã·ã¹ãã ãã©ã®ããã«å¿çãããã調ã¹ãŸããã ããã«ãæ©èœãæ¡åŒµããŠã3çªç®ã®ã¢ãžã¥ãŒã«ãæ€èšããæé»ã®èªã¿ãããã®æŠå¿µã«ã€ããŠèª¬æããŸããã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ã次ã®åé¡ã«å¯ŸåŠããŸãã
- ã¢ãžã¥ãŒã«ãã¹ã«åãååã®è€æ°ã®ã¢ãžã¥ãŒã«ãå«ãŸããŠããå ŽåãJigsawã¯ã©ã®ããã«æ©èœããŸããïŒ
- ã¢ãžã¥ãŒã«ãžã®ãã¹ã«ç°ãªãã¢ãžã¥ãŒã«ããããåãããã±ãŒãžããšã¯ã¹ããŒããããšã©ããªããŸããïŒ
- ã¢ãžã¥ãŒã«åãããŠããªãç¶æ¿ãããäŸåé¢ä¿ãã©ãããŸããïŒ
- ã©ã³ã¿ã€ã ã®ç¬èªã®åãæšãŠããŒãžã§ã³ãäœæããæ¹æ³ã¯ïŒ