翻蚳è ããïŒ ãã©ãããã©ãŒã ãJava 11ã¬ãŒã«ã«ç¿»èš³ããããšã«ç©æ¥µçã«åãçµãã§ãããJava 8/11ã®æ©èœãèæ ®ã«å ¥ããŠãJavaã©ã€ãã©ãªïŒ YARGãªã©ïŒãå¹æçã«éçºããæ¹æ³ãæ€èšããŠããŸãã èãããã解決çã®1ã€ã¯ãã«ããªãªãŒã¹JARã§ããããã¹ãŠãã¹ã ãŒãºã§ã¯ãããŸããã
Java 9ã«ã¯ããã«ããªãªãŒã¹JARãšåŒã°ããæ°ããJavaã©ã³ã¿ã€ã ãªãã·ã§ã³ãå«ãŸããŠããŸãã ããã¯ããããããã©ãããã©ãŒã ã§æãç©è°ãéžãé©æ°ã®1ã€ã§ãã TL; DRïŒããã¯æ·±å»ãªåé¡ã«å¯Ÿããæ²ãã£ã解決çã§ããããšãããããŸãã ã ãã®æçš¿ã§ã¯ããªãããèããã®ãã説æããæ¬åœã«å¿ èŠãªå Žåã«ãã®ãããªJARãæ§ç¯ããæ¹æ³ã説æããŸãã
ãã«ããªãªãŒã¹JARãŸãã¯MR JARã¯ãJDK 9ã§å°å ¥ãããJavaãã©ãããã©ãŒã ã®æ°æ©èœã§ããããã§ã¯ããã®ãã¯ãããžãŒã®äœ¿çšã«é¢é£ããé倧ãªãªã¹ã¯ãšãGradleã䜿çšãããã«ããªãªãŒã¹JARã®äœææ¹æ³ã«ã€ããŠè©³ãã説æããŸããããã§ããããå Žåã
å®éããã«ããªãªãŒã¹JARã¯ãç°ãªãããŒãžã§ã³ã®ã©ã³ã¿ã€ã ã§äœæ¥ããããã®åãã¯ã©ã¹ã®è€æ°ã®ããªã¢ã³ããå«ãJavaã¢ãŒã«ã€ãã§ãã ããšãã°ãJDK 8ã§äœæ¥ããŠããå ŽåãJavaç°å¢ã¯JDK 8ã®ã¯ã©ã¹ããŒãžã§ã³ã䜿çšããJava 9ã®å Žåã¯Java 9ã®ããŒãžã§ã³ã䜿çšãããŸããåæ§ã«ãJava 10ã®å°æ¥ã®ãªãªãŒã¹çšã«ããŒãžã§ã³ãäœæãããå Žåãã©ã³ã¿ã€ã ã¯Javaã®ããŒãžã§ã³ã§ã¯ãªããã®ããŒãžã§ã³ã䜿çšããŸã9ãŸãã¯ããã©ã«ãããŒãžã§ã³ïŒJava 8ïŒã
ã«ããã®äžã§ãæ°ããJAR圢åŒã®ããã€ã¹ãç解ããããã§ãã¹ãŠãã©ããã確èªããŸãã
ãã«ããªãªãŒã¹JARã䜿çšããå Žå
- æé©åãããã©ã³ã¿ã€ã ã ããã¯ãå€ãã®éçºè ãçŽé¢ããåé¡ã®è§£æ±ºçã§ããã¢ããªã±ãŒã·ã§ã³ãéçºãããšããã©ã®ç°å¢ã§å®è¡ããããã¯äžæã§ãã ãã ããã©ã³ã¿ã€ã ã®äžéšã®ããŒãžã§ã³ã§ã¯ãåãã¯ã©ã¹ã®æ±çšããŒãžã§ã³ãåã蟌ãããšãã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããJavaã®ããŒãžã§ã³çªå·ã衚瀺ãããšããŸãã Java 9ã®å ŽåãRuntime.getVersionã¡ãœããã䜿çšã§ããŸãã ãã ããããã¯Java 9以éã§ã®ã¿äœ¿çšå¯èœãªæ°ããã¡ãœããã§ãã ä»ã®ã©ã³ã¿ã€ã ãããšãã°Java 8ãå¿ èŠãªå Žåã¯ãjava.versionããããã£ã解æããå¿ èŠããããŸãã ãã®çµæã1ã€ã®é¢æ°ã®2ã€ã®ç°ãªãå®è£ ãã§ããŸãã
競åããAPIïŒAPIéã®ç«¶åã®è§£æ±ºãäžè¬çãªåé¡ã§ãã ããšãã°ã2ã€ã®ã©ã³ã¿ã€ã ããµããŒãããå¿ èŠããããŸããããã®ãã¡ã®1ã€ã§ã¯APIã¯éæšå¥šã§ãã ãã®åé¡ã«ã¯2ã€ã®äžè¬çãªè§£æ±ºçããããŸãã
- æåã¯åå°ã§ãã ããšãã°ãVersionProviderã€ã³ã¿ãŒãã§ãŒã¹ãæå®ãã次ã«2ã€ã®ç¹å®ã®ã¯ã©ã¹Java8VersionProviderããã³Java9VersionProviderãæå®ããŠã察å¿ããã¯ã©ã¹ãã©ã³ã¿ã€ã ã«ããŒãã§ããŸãïŒ2ã€ã®ã¯ã©ã¹ããéžæããããã«ããŒãžã§ã³çªå·ã解æããå¿ èŠãããã®ã¯é¢çœãããšã§ãïŒïŒã ãã®ãœãªã¥ãŒã·ã§ã³ã®ãªãã·ã§ã³ã®1ã€ã¯ããªãã¬ã¯ã·ã§ã³ã䜿çšããŠåŒã³åºãããããŸããŸãªã¡ãœãããæã€åäžã®ã¯ã©ã¹ãäœæããããšã§ãã
- ããé«åºŠãªãœãªã¥ãŒã·ã§ã³ã¯ãå¯èœãªå Žåã¯ã¡ãœãããã³ãã«ã䜿çšããããšã§ãã ã»ãšãã©ã®å Žåããªãã¬ã¯ã·ã§ã³ã¯æå¶çã§äžå¿«ã§ãããäžè¬çã«ã¯ããã§ãã
ãã«ããªãªãŒã¹JARã®æ¢ç¥ã®ä»£æ¿
2çªç®ã®æ¹æ³ã¯ãããã·ã³ãã«ã§ç解ããããæ¹æ³ã§ãã©ã³ã¿ã€ã ããšã«2ã€ã®ç°ãªãã¢ãŒã«ã€ããäœæããããšã§ãã çè«çã«ã¯ãIDEã§åãã¯ã©ã¹ã®2ã€ã®å®è£ ãäœæãããããã2ã€ã®ç°ãªãã¢ãŒãã£ãã¡ã¯ãã«ã³ã³ãã€ã«ããã¹ããããã³æ£ããããã¯ããããšããã«ãã·ã¹ãã ã®ã¿ã¹ã¯ã§ãã ããã¯ãé·å¹Žã°ã¢ããŸãã¯ã¹ããã¯ã§äœ¿çšãããŠããã¢ãããŒãã§ãã ããããScalaã®ãããªèšèªã«ãå¿ èŠã§ãã ã³ã³ãã€ã©ãŒãšã©ã³ã¿ã€ã ã«ã¯éåžžã«å€ãã®ãªãã·ã§ã³ãããããããã€ããªãŒäºææ§ã¯ã»ãšãã©å®çŸã§ããŸããã
ãã ããå¥ã®JARã¢ãŒã«ã€ãã䜿çšããçç±ã¯ä»ã«ããããããããŸãã
- JARã¯åãªããããã³ã°ã®æ¹æ³ã§ãã
ã¯ã©ã¹ãå«ãã¢ã»ã³ããªã¢ãŒãã£ãã¡ã¯ãã§ãããããã ãã§ã¯ãããŸãããéåžžããªãœãŒã¹ãã¢ãŒã«ã€ãã«å«ãŸããŸãã ãªãœãŒã¹åŠçã®ãããªããã±ãŒãžã«ã¯äŸ¡æ ŒããããŸãã GradleããŒã ã®ç®çã¯ããã«ãã®å質ãåäžãããéçºè ãçµæããã¹ãããã«ãããã»ã¹å šè¬ãã³ã³ãã€ã«ããããã®åŸ ã¡æéãççž®ããããšã§ãã ã¢ãŒã«ã€ããããã»ã¹ã«ããŸãã«ãæ©ã衚瀺ããããšãäžèŠãªåæãã€ã³ããäœæãããŸãã ããšãã°ãAPIäŸåã¯ã©ã¹ãã³ã³ãã€ã«ããããã«å¿ èŠãªãã®ã¯ã.classãã¡ã€ã«ã®ã¿ã§ãã jarã¢ãŒã«ã€ããjarå ã®ãªãœãŒã¹ãå¿ èŠãããŸããã åæ§ã«ãGradleãã¹ããå®è¡ããã«ã¯ã¯ã©ã¹ãã¡ã€ã«ãšãªãœãŒã¹ã®ã¿ãå¿ èŠã§ãã ãã¹ãçšã®jarãäœæããå¿ èŠã¯ãããŸããã å€éšãŠãŒã¶ãŒïŒã€ãŸããå ¬éæïŒã®ã¿ãå¿ èŠã§ãã ãã ããã¢ãŒãã£ãã¡ã¯ãã®äœæãå¿ é ã«ãªã£ãå Žåãäžéšã®ã¿ã¹ã¯ã䞊è¡ããŠå®è¡ã§ãããã¢ã»ã³ããªããã»ã¹å šäœãçŠæ¢ãããŸãã å°èŠæš¡ãªãããžã§ã¯ãã§ã¯ãããéèŠã§ã¯ãªãå Žåã倧èŠæš¡ãªäŒæ¥ãããžã§ã¯ãã§ã¯ãããäž»ãªæžéèŠå ã§ãã
- jarã¢ãŒã«ã€ãã¯ãã¢ãŒãã£ãã¡ã¯ãã§ãããããäŸåé¢ä¿ã«é¢ããæ å ±ãä¿æã§ããªãããšãã¯ããã«éèŠã§ãã
Java 9ããã³Java 8ã©ã³ã¿ã€ã ã®åã¯ã©ã¹ã®äŸåé¢ä¿ãåãã«ãªãããšã¯ã»ãšãã©ãããŸããã ã¯ããåçŽãªäŸã§ã¯ããã«ãªããŸããã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ããã¯åœãŠã¯ãŸããŸããïŒéåžžããŠãŒã¶ãŒã¯Java 9æ©èœã®ã©ã€ãã©ãªã®ããã¯ããŒããã€ã³ããŒãããããã䜿çšããŠJava 8ã¯ã©ã¹ã®ããŒãžã§ã³ãå®è£ ããŸããç°ãªãäŸåé¢ä¿ããªãŒãæã€èŠçŽ ããããŸãã ããã¯ãJava 9ã§äœæ¥ããŠããå ŽåãäžèŠãªäŸåé¢ä¿ãããããšãæå³ããŸãã ããã«ãã¯ã©ã¹ãã¹ãæ±æããã©ã€ãã©ãªãŠãŒã¶ãŒã®ç«¶åãåŒãèµ·ããå¯èœæ§ããããŸãã
æåŸã«ã1ã€ã®ãããžã§ã¯ãã§ãããŸããŸãªç®çã®JARãäœæã§ããŸãã
- APIçš
- Java 8ã®
- Java 9ã®
- ãã€ãã£ããã€ã³ãã£ã³ã°ãã
- ãªã©
äŸåé¢ä¿ã®åé¡åã誀ã£ãŠäœ¿çšãããšãåãã¡ã«ããºã ã®å ±æã«é¢é£ãã競åãçºçããŸãã éåžžã ãœãŒã¹ãŸãã¯javadocsã¯åé¡åãšããŠã€ã³ã¹ããŒã«ãããŸãããå®éã«ã¯äŸåé¢ä¿ã¯ãããŸããã
- äžæŽåãçæããããªãã®ã§ããã«ãããã»ã¹ã¯ã¯ã©ã¹ã®ååŸæ¹æ³ã«äŸåãã¹ãã§ã¯ãããŸããã èšãæãããšããã«ããªãªãŒã¹jarã䜿çšãããšå¯äœçšããããŸããJARã¢ãŒã«ã€ãããã®åŒã³åºããšã¯ã©ã¹ãã£ã¬ã¯ããªããã®åŒã³åºãã¯ããŸã£ããç°ãªããã®ã«ãªããŸããã ã»ãã³ãã£ã¯ã¹ã«ã¯å€§ããªéãããããŸãïŒ
- JARã®äœæã«äœ¿çšããããŒã«ã«ãã£ãŠã¯ãäºææ§ã®ãªãJARã¢ãŒã«ã€ããããå ŽåããããŸãïŒ 1ã€ã®ã¢ãŒã«ã€ãã«2ã€ã®ã¯ã©ã¹ãªãã·ã§ã³ãããã±ãŒãžåãããšãã«ãããããåäžã®ãªãŒãã³APIïŒ jarãŠãŒãã£ãªãã£èªäœïŒãæã€ããšãä¿èšŒããå¯äžã®ããŒã«ã§ãã ããã¯ãçç±ããªãããã§ã¯ãããŸããããå¿ ãããã¢ã»ã³ããªããŒã«ããŠãŒã¶ãŒãé¢äžããããã§ã¯ãããŸããã JARã¯ãåºæ¬çã«ZIPã¢ãŒã«ã€ãã«äŒŒãããšã³ãããŒããã§ãã ãã®ãããåéæ¹æ³ã«å¿ããŠãããŸããŸãªåäœãçºçããããééã£ãã¢ãŒãã£ãã¡ã¯ããåéããå¯èœæ§ããããŸãïŒæ°ä»ããªãã§ãããïŒã
åã ã®JARã¢ãŒã«ã€ãã管çããããå¹ççãªæ¹æ³
éçºè ãåå¥ã®ã¢ãŒã«ã€ãã䜿çšããªãäž»ãªçç±ã¯ãåéããŠäœ¿çšããã®ãäžäŸ¿ã§ããããšã§ãã ãã«ãããŒã«ã®ããã§ããGradleãç»å Žããåã¯ãããã«ãŸã£ãã察åŠã§ããŸããã§ããã ç¹ã«ãMavenã§ãã®ã¡ãœããã䜿çšãã人ã¯ãè¿œå ã®ã¢ãŒãã£ãã¡ã¯ããå ¬éããããã«ã匱ãåé¡é¢æ°ã®ã¿ã«äŸåã§ããŸããã ãã ãã åé¡åšã¯ãã®å°é£ãªç¶æ³ã§ã¯åœ¹ã«ç«ã¡ãŸããã ãœãŒã¹ãããã¥ã¡ã³ããjavadocsã®çºè¡ããã©ã€ãã©ãªãªãã·ã§ã³ã®å®è£ ïŒguava-jdk5ãguava-jdk7ã...ïŒãããŸããŸãªãŠãŒã¹ã±ãŒã¹ïŒapiãfat jarã...ïŒãŸã§ãããŸããŸãªç®çã§äœ¿çšãããŸãã å®éã«ã¯ã åé¡åã®äŸåé¢ä¿ããªãŒãã¡ã€ã³ãããžã§ã¯ãã®äŸåé¢ä¿ããªãŒãšç°ãªãããšã瀺ãæ¹æ³ã¯ãããŸããã ã€ãŸããPOM圢åŒã¯æ ¹æ¬çã«å£ããŠããŸãã ããã¯ãã³ã³ããŒãã³ããã©ã®ããã«ã¢ã»ã³ãã«ãããããããã³ã³ã³ããŒãã³ããæäŸããææç©ãè¡šããŸãã 2ã€ã®ç°ãªãjarã¢ãŒã«ã€ãïŒãã¹ãŠã®äŸåé¢ä¿ãå«ãã¯ã©ã·ãã¯jarãšãã¡ããjarïŒãå®è£ ããå¿ èŠããããšããŸãã Mavenã¯ãæããã«ééã£ãŠããå Žåã§ãã2ã€ã®ã¢ãŒãã£ãã¡ã¯ãã«åäžã®äŸåé¢ä¿ããªãŒããããšå€æããŸãïŒ ãã®å Žåãããã¯æããã§ãããç¶æ³ã¯ãã«ããªãªãŒã¹JARãšåãã§ãïŒ
解決çã¯ããªãã·ã§ã³ãæ£ããåŠçããããšã§ãã Gradleã¯ããªãã·ã§ã³ã«åºã¥ããŠäŸåé¢ä¿ã管çããããšã§ãããå®è¡ã§ããŸãã çŸåšããã®æ©èœã¯Androidã§ã®éçºã«äœ¿çšã§ããŸãããJavaããã³ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³çšã®ããŒãžã§ã³ã«ãåãçµãã§ããŸãïŒ
ããªã¢ã³ãããŒã¹ã®äŸåé¢ä¿ç®¡çã¯ãã¢ãžã¥ãŒã«ãšã¢ãŒãã£ãã¡ã¯ããå®å šã«ç°ãªããã®ã§ãããšããäºå®ã«åºã¥ããŠããŸãã åãã³ãŒãã¯ãç°ãªãèŠä»¶ãèæ ®ããŠãç°ãªãã©ã³ã¿ã€ã ã§å®å šã«æ©èœããŸãã ãã€ãã£ãã³ã³ãã€ã«ã§äœæ¥ãã人ã«ãšã£ãŠãããã¯é·ãéæçœã§ãããi386ãšamd64åãã«ã³ã³ãã€ã«ãã i386ã©ã€ãã©ãªã®äŸåé¢ä¿ãarm64ãšå¹²æžããããšã¯æ±ºããŠã§ããŸããïŒ Javaã®ã³ã³ããã¹ãã§ã¯ãããã¯ãJava 8ã®å Žåãã¯ã©ã¹åœ¢åŒãJava 8ã«å¯Ÿå¿ãããjava 8ãJARã¢ãŒã«ã€ãã®ããŒãžã§ã³ãäœæããå¿ èŠãããããšãæå³ããŸãããã®ã¢ãŒãã£ãã¡ã¯ãã«ã¯ã䜿çšããäŸåé¢ä¿ã«é¢ããæ å ±ãå«ãã¡ã¿ããŒã¿ãå«ãŸããŸãã Java 8ãŸãã¯9ã®å ŽåãããŒãžã§ã³ã«å¯Ÿå¿ããäŸåé¢ä¿ãéžæãããŸãã ããã¯ãšãŠãç°¡åã§ãïŒå®éãã©ã³ã¿ã€ã ã¯ãªãã·ã§ã³ã®1ã€ã®ãã£ãŒã«ãã«ãããªãããã§ã¯ãªããããã€ããçµã¿åãããããšãã§ããŸãïŒã
ãã¡ããããããŸã§ã«é床ã®è€éãã®ããã«ãããè¡ã£ã人ã¯ããŸããã§ãããMavenã¯ãæããã«ããã®ãããªè€éãªæäœã®å®è¡ãèš±å¯ããŸããã ããããGradleã§ã¯å¯èœã§ãã GradleããŒã ã¯çŸåšã䜿çšãããªãã·ã§ã³ããŠãŒã¶ãŒã«äŒããæ°ããã¡ã¿ããŒã¿åœ¢åŒã«åãçµãã§ããŸãã ç°¡åã«èšãã°ããã«ãããŒã«ã¯ããã®ãããªã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ããã¹ããããã±ãŒãžåãããã³åŠçãåŠçããå¿ èŠããããŸãã ããšãã°ããããžã§ã¯ãã¯Java 8ããã³Java 9ã©ã³ã¿ã€ã ã§åäœããã¯ãã§ãããçæ³çã«ã¯ãã©ã€ãã©ãªã®2ã€ã®ããŒãžã§ã³ãå®è£ ããå¿ èŠããããŸãã ããã¯ã2ã€ã®ç°ãªãã³ã³ãã€ã©ïŒJava 8ã§ã®äœæ¥æã«Java 9 APIã䜿çšããªãããïŒã2ã€ã®ã¯ã©ã¹ãã£ã¬ã¯ããªããããŠæçµçã«ã¯2ã€ã®ç°ãªãJARã¢ãŒã«ã€ããããããšãæå³ããŸãã ãŸããã»ãšãã©ã®å Žåã2ã€ã®ã©ã³ã¿ã€ã ããã¹ãããå¿ èŠããããŸãã ãŸãã¯ã2ã€ã®ã¢ãŒã«ã€ããå®è£ ããŸãããJava 9ã©ã³ã¿ã€ã ã§Java 8ããŒãžã§ã³ã®åäœããã¹ãããããšã«ããŸãïŒããã¯èµ·åæã«çºçããå¯èœæ§ãããããã§ãïŒïŒã
ãã®ã¹ããŒã ã¯ãŸã å®è£ ãããŠããŸããããGradleããŒã ã¯ãã®æ¹åã§å€§ããªé²æ©ãéããŠããŸãã
Gradleã䜿çšããŠãã«ããªãªãŒã¹JARãäœæããæ¹æ³
ãããããã®é¢æ°ããŸã æºåãã§ããŠããªãå Žåãã©ãããã°ããã§ããïŒ ãªã©ãã¯ã¹ããŠãåãæ¹æ³ã§æ£ããã¢ãŒãã£ãã¡ã¯ããäœæãããŸãã äžèšã®æ©èœãJavaãšã³ã·ã¹ãã ã«è¡šç€ºãããåã«ã2ã€ã®ãªãã·ã§ã³ããããŸãã
- ãªãã¬ã¯ã·ã§ã³ãŸãã¯ç°ãªãJARã¢ãŒã«ã€ãã䜿çšããå€ãè¯ãæ¹æ³ã
- ãã«ããªãªãŒã¹JARã䜿çšããŸãïŒé©åãªãŠãŒã¹ã±ãŒã¹ãããå Žåã§ããããã¯æªããœãªã¥ãŒã·ã§ã³ã«ãªãå¯èœæ§ãããããšã«æ³šæããŠãã ããïŒã
ããŸããŸãªã¢ãŒã«ã€ããŸãã¯ãã«ããªãªãŒã¹JARãéžæããŠããã¹ããŒã ã¯åãã§ãã ãã«ããªãªãŒã¹JARã¯åºæ¬çã«ééã£ãããã±ãŒãžã§ãããªãã·ã§ã³ã§ã¯ãªããç®æšã§ããã¹ãã§ãã æè¡çã«ã¯ããœãŒã¹ã¬ã€ã¢ãŠãã¯åã ã®JARãšå€éšJARã§åãã§ãã ãã®ãªããžããªã§ã¯ãGradleã䜿çšããŠãã«ããªãªãŒã¹JARãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã»ã¹ã®æ¬è³ªã以äžã«ç°¡åã«èª¬æããŸãã
ãŸããéçºè ã®æªãç¿æ £ã®1ã€ãåžžã«èŠããŠããå¿ èŠããããŸããã¢ãŒãã£ãã¡ã¯ããèµ·åãããäºå®ã®åãããŒãžã§ã³ã®Javaã䜿çšããŠGradleïŒãŸãã¯MavenïŒãå®è¡ããŸãã ããã«ãGradleãèµ·åããããã«æ°ããããŒãžã§ã³ã䜿çšãããå Žåãããã以åã®APIã¬ãã«ã§ã³ã³ãã€ã«ãè¡ãããŸãã ããããããããç¹å¥ãªçç±ã¯ãããŸããã Gradleã§ã¯ã Rossã®ã³ã³ãã€ã«ãå¯èœã§ãã JDKã®äœçœ®ãèšè¿°ããã³ã³ãã€ã«ãå¥ã®ããã»ã¹ãšããŠå®è¡ããŠããã®JDKã䜿çšããŠã³ã³ããŒãã³ããã³ã³ãã€ã«ã§ããŸãã ããŸããŸãªJDKãæ§æããæè¯ã®æ¹æ³ã¯ããã®ãã¡ã€ã«ã§è¡ãããŠããããã« ãç°å¢å€æ°ãä»ããŠJDKãžã®ãã¹ãæ§æããããšã§ã ã 次ã«ããœãŒã¹/ã¿ãŒã²ãããã©ãããã©ãŒã ãšã®äºææ§ã«åºã¥ããŠãé©åãªJDKã䜿çšããããã«Gradleãæ§æããå¿ èŠããããŸã ã JDK 9以éãã¯ãã¹ã³ã³ãã€ã«ã«ã¯ä»¥åã®ããŒãžã§ã³ã®JDKã¯å¿ èŠãªãããšã«æ³šæããŠãã ããã ããã«ãããæ°æ©èœ-releaseãäœæãããŸãã Gradle ã¯ãã®é¢æ°ã䜿çšã ãå¿ èŠã«å¿ããŠã³ã³ãã€ã©ãæ§æããŸãã
ãã1ã€ã®éèŠãªãã€ã³ãã¯ãæå®ãœãŒã¹ã»ããã§ãã ãœãŒã¹ã»ããã¯ãäžç·ã«ã³ã³ãã€ã«ããå¿ èŠããããœãŒã¹ãã¡ã€ã«ã®ã»ããã§ãã JARã¯ã1ã€ä»¥äžã®ãœãŒã¹ã»ãããã³ã³ãã€ã«ããããšã«ãã£ãŠååŸãããŸãã Gradleã¯ãã»ããããšã«é©åãªã«ã¹ã¿ã ã³ã³ãã€ã«ã¿ã¹ã¯ãèªåçã«äœæããŸãã ã€ãŸããJava 8ããã³Java 9ã®ãœãŒã¹ãããå Žåããããã®ãœãŒã¹ã¯ç°ãªãã»ããã«ãªããŸãã ããããJava 9ã®ãœãŒã¹ã³ãŒãã»ããã§åäœããæ¹æ³ã§ãããã¯ã©ã¹ã®ããŒãžã§ã³ããããŸãã ããã¯æ¬åœã«æ©èœããMavenã®ããã«å¥ã®ãããžã§ã¯ããäœæããå¿ èŠã¯ãããŸããã ããããæãéèŠãªããšã¯ããã®æ¹æ³ã䜿çšãããšãã»ããã®ã³ã³ãã€ã«ã埮調æŽã§ããããšã§ãã
1ã€ã®ã¯ã©ã¹ã®ç°ãªãããŒãžã§ã³ãæã€ããšã®é£ããã®1ã€ã¯ãã¯ã©ã¹ã³ãŒããä»ã®ã³ãŒãããã»ãšãã©ç¬ç«ããŠããªãããšã§ãïŒã¡ã€ã³ã»ããã«ãªãã¯ã©ã¹ãšã®äŸåé¢ä¿ãããïŒã ããšãã°ããã®APIã¯ãJava 9ããµããŒãããããã«ç¹å¥ãªãœãŒã¹ãå¿ èŠãšããªãã¯ã©ã¹ã䜿çšã§ããŸããåæã«ãããããã¹ãŠã®å ±éã¯ã©ã¹ãåã³ã³ãã€ã«ããJava 9çšã«ããŒãžã§ã³ãããã¯ããããããŸãããç¹å®ã®JDKã®ã¯ã©ã¹ã ããã§èšå®ããŸã ïŒJava 9ã®ãœãŒã¹ã»ãããšã¡ã€ã³ã»ããã®éã«äŸåé¢ä¿ãè¿œå ããŠãJava 9ã®ããŒãžã§ã³ãã³ã³ãã€ã«ãããšãã«ããã¹ãŠã®å ±éã¯ã©ã¹ãã³ã³ãã€ã«ã¯ã©ã¹ãã¹ã«æ®ãããã«ããŸãã
次ã®ã¹ãããã¯ç°¡åã§ãããœãŒã¹ã®äž»èŠãªã»ãããJava 8 APIã¬ãã«ã§ã³ã³ãã€ã«ãããJava 9ã®ã»ãããJava 9ã¬ãã«ã§ã³ã³ãã€ã«ãããããšãGradleã«èª¬æããå¿ èŠããããŸãã
äžèšã®ãã¹ãŠã¯ãåè¿°ã®ã¢ãããŒãã®äž¡æ¹ã䜿çšããã®ã«åœ¹ç«ã¡ãŸããå¥åã®JARã¢ãŒã«ã€ããŸãã¯ãã«ããªãªãŒã¹JARãå®è£ ããŸãã æçš¿ã¯ãã®ãããã¯ã«é¢ãããã®ãªã®ã§ãGradleã«ãã«ããªãªãŒã¹JARãäœæãããæ¹æ³ã®äŸãèŠãŠã¿ãŸãããã
jar { into('META-INF/versions/9') { from sourceSets.java9.output } manifest.attributes( 'Multi-Release': 'true' ) }
ãã®ãããã¯ã¯ãMR JARã«äœ¿çšãããMETA-INF / versions / 9ãã£ã¬ã¯ããªã«Java 9ã®ã¯ã©ã¹ãããã¯ãããããã§ã¹ãã§ãã«ããªãªãŒã¹ã©ãã«ãèšå®ããããšã説æããŠããŸãã
ããã§ãæåã®MR JARã®æºåãã§ããŸããïŒ
ããããæ®å¿µãªããããã®äœæ¥ã¯ãŸã çµãã£ãŠããŸããã Gradleã䜿çšããå Žåãã¢ããªã±ãŒã·ã§ã³ãã©ã°ã€ã³ã䜿çšãããšã å®è¡ã¿ã¹ã¯ãä»ããŠã¢ããªã±ãŒã·ã§ã³ãçŽæ¥å®è¡ã§ããããšãããããŸãã ãã ããGradleã¯éåžžãäœæ¥éãæå°éã«ããããšããããã å®è¡ã¿ã¹ã¯ã¯ã¯ã©ã¹ãã£ã¬ã¯ããªãšåŠçäžã®ãªãœãŒã¹ã®ãã£ã¬ã¯ããªã®äž¡æ¹ã䜿çšããå¿ èŠããããŸãã ãã«ããªãªãŒã¹JARã®å ŽåãJARã¯ããã«å¿ èŠã«ãªããããããã¯åé¡ã§ãã ãã®ããããã©ã°ã€ã³ã䜿çšãã代ããã«ãç¬èªã®ã¿ã¹ã¯ãäœæããå¿ èŠããããŸããããã¯ããã«ããªãªãŒã¹JARã®äœ¿çšã«å¯Ÿããè°è«ã§ãã
ãããŠæåŸã«ãªããŸããããã¯ã©ã¹ã®2ã€ã®ããŒãžã§ã³ããã¹ãããå¿ èŠãããããšã«èšåããŸããã ãã®å ŽåãJavaã©ã³ã¿ã€ã ã®-releaseããŒã¯ã³ã«çžåœãããã®ããªããããVMã®ã¿ãå¥ã®ããã»ã¹ã§äœ¿çšã§ããŸãã ã¢ã€ãã¢ã¯1ã€ã®ãã¹ãã ããèšè¿°ããå¿ èŠãããããJava 8ãšJava 9ã§ã¯2åå®è¡ããããšãããã®ã§ããããã¯ãã©ã³ã¿ã€ã åºæã®ã¯ã©ã¹ãæ£ããæ©èœããããšã確èªããå¯äžã®æ¹æ³ã§ãã ããã©ã«ãã§ã¯ãGradleã¯1ã€ã®ãã¹ãã¿ã¹ã¯ãäœæããJARã®ä»£ããã«åãæ¹æ³ã§ã¯ã©ã¹ãã£ã¬ã¯ããªã䜿çšããŸãã ãããã£ãŠã2ã€ã®ããšãè¡ããŸããJava9ã®ãã¹ãã¿ã¹ã¯ãäœæããJARãšæå®ãããJavaã©ã³ã¿ã€ã ã䜿çšããããã«äž¡æ¹ã®ã¿ã¹ã¯ãæ§æããŸãã å®è£ ã¯æ¬¡ã®ããã«ãªããŸãã
test { dependsOn jar def jdkHome = System.getenv("JAVA_8") classpath = files(jar.archivePath, classpath) - sourceSets.main.output executable = file("$jdkHome/bin/java") doFirst { println "$name runs test using JDK 8" } } task testJava9(type: Test) { dependsOn jar def jdkHome = System.getenv("JAVA_9") classpath = files(jar.archivePath, classpath) - sourceSets.main.output executable = file("$jdkHome/bin/java") doFirst { println classpath.asPath println "$name runs test using JDK 9" } } check.dependsOn(testJava9)
ããã§ãã¿ã¹ã¯ã®éå§æã«ãGradleãç®çã®JDKã䜿çšããŠãœãŒã¹ã®åã»ãããã³ã³ãã€ã«ãããã«ããªãªãŒã¹JARãäœæããŠãããäž¡æ¹ã®JDKã§ãã®JARã䜿çšããŠãã¹ããå®è¡ããããšã確èªããŸãã Gradleã®å°æ¥ã®ããŒãžã§ã³ã¯ãããããã宣èšçã«è¡ãã®ã«åœ¹ç«ã¡ãŸãã
ãããã«
ãŸãšãããšã ãã«ããªãªãŒã¹JARã¯ãå€ãã®ã©ã€ãã©ãªéçºè ãçŽé¢ããå®éã®åé¡ã解決ããè©Šã¿ã§ããããšãåŠã³ãŸããã ãã ãããã®åé¡ã®è§£æ±ºçã¯ééã£ãŠããããã§ãã æ£ããäŸåé¢ä¿ç®¡çãã¢ãŒãã£ãã¡ã¯ããšãªãã·ã§ã³ã®ãªã³ã¯ãããã©ãŒãã³ã¹ãžã®é¢å¿ïŒã§ããã ãå€ãã®ã¿ã¹ã¯ã䞊è¡ããŠå®è¡ããæ©èœïŒ-ããããã¹ãŠãMR JARã貧ãã人ã ã®è§£æ±ºçã«ããŸãã ãã®åé¡ã¯ãªãã·ã§ã³ã䜿çšããŠæ£ãã解決ã§ããŸãã ããã§ããGradleããªã¢ã³ãã䜿çšããäŸåé¢ä¿ç®¡çã¯éçºäžã§ãããåçŽãªã±ãŒã¹ã§ã¯ãã«ããªãªãŒã¹JARãéåžžã«äŸ¿å©ã§ãã ãã®å Žåããã®æçš¿ã¯ããããè¡ãæ¹æ³ãããã³Gradleã®å²åŠãMavenïŒãœãŒã¹ã»ãããšãããžã§ã¯ãïŒã®éããç解ããã®ã«åœ¹ç«ã¡ãŸãã
æåŸã«ããã«ããªãªãŒã¹JARãçã«ããªã£ãŠããå ŽåãããããšãåŠå®ããŸãããããšãã°ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããç°å¢ïŒã©ã€ãã©ãªã§ã¯ãªãïŒãäžæãªå Žåã§ãããããã¯ãããäŸå€ã§ãã ãã®æçš¿ã§ã¯ãã©ã€ãã©ãªéçºè ãçŽé¢ããäž»ãªåé¡ãšããã«ããªãªãŒã¹JARããããã解決ããããšããæ¹æ³ã«ã€ããŠèª¬æããŸããã ãªãã·ã§ã³ãšããŠã®äŸåé¢ä¿ã®æ£ããã¢ããªã³ã°ã¯ããã«ããªãªãŒã¹JARãšæ¯èŒããŠãããã©ãŒãã³ã¹ãæ¹åãïŒãã现ãã䞊ååŠçã«ããïŒãã¡ã³ããã³ã¹ã³ã¹ããåæžããŸãïŒäºæããªãè€éããåé¿ïŒã ããªãã®ç¶æ³ã§ã¯ãMR JARãå¿ èŠã«ãªãå¯èœæ§ããããããGradleããã§ã«ãããåŠçããŠããŸãã ãã®ãµã³ãã«ãããžã§ã¯ããèŠãŠãèªåã§è©ŠããŠã¿ãŠãã ããã