====== Java 9 Module ====== * 모듈화(modularization)은 필수는 아니다. * [[java:jdeps|jdeps]] ===== 기본 명령 ===== * ''java %%--%%list-modules'' : 전체 모듈 목록 * ''java %%--%%describe-module '' : 모듈 정보 보기 * ''jar -f -d'' : describe ''module.jar'' * '' java -p %%--module%% '' : '''' 모듈에 main 으로 지정된 클래스 실행. * ''classpath''에서 실행하면 module 기능이 작동하지 않게 된다. ===== exports / requires ===== * ''exports'' : package 를 export 한다. export 된 패키지는 public 으로 외부접근 가능하며, 그렇지 않은 패키지는 모듈 내부에서만 사용 가능하다. * ''requires'' : 다른 module 을 필요로 한다. * ''java.base'' 모듈은 명시하지 않아도 자동으로 의존한다. ===== module descriptor ===== * ''module-info.java'' module java.base { exports java.io; exports java.lang; ... } ===== unnamed module ===== * ''classpath'' 상에서 jar를 실행하면 unnamed module 상태가 된다. ===== automatic module ===== * module path 에서 실행되는 jar 는 module descriptor 가 없어도 jar 파일 이름이 자동으로 모듈이름이 된다. * 그래야만 module들 끼리 의존성을 지정하거나 할 수 있다. * 이 기능이 되어야 class path 기반에서 module path 기반으로 마이그레이션이 가능하다. jar -f movie_fe.jar -d movie.fe automatic ... ===== module 타입별 차이점 ===== ^ 타입 ^ path 방식 ^ ''module-info.java'' ^ requires & exports ^ | unnamed | classpath | 없음 | requires 전체 모듈, exports 전체 패키지 | | automatic | modulepath | 없음 | requires 전체 모듈, exports 전체 패키지 | | explicit | modulepath | 있음 | 명시적으로 requires, exports 지정 | ===== 참조 ===== * [[http://in.relation.to/2017/12/12/exploring-jlink-plugin-api-in-java-9/|Exploring the jlink plug-in API in Java 9 - In Relation To]] * [[https://www.baeldung.com/java-9-modularity|A Guide to Java 9 Modularity | Baeldung]] * [[https://medium.com/@kamatkar.onkar/from-legacy-to-modular-spring-app-3d41ebaf1fd9|From Legacy (Java ≤ 8) to Modular (Java 9) Spring App | by onkar kamatkar | Medium]] * [[https://www.oracle.com/kr/corporate/features/understanding-java-9-modules.html|Understanding Java 9 Modules | Oracle 대한민국]] * [[https://developer.ibm.com/tutorials/java-modularity-1/|Java 9+ modularity: The theory and motivations behind modularity - IBM Developer]] * https://www.youtube.com/watch?v=pfXsQyToipM * https://www.youtube.com/watch?v=22OW5t_Mbnk * [[https://jenkov.com/tutorials/java/modules.html|Java Modules]] * [[https://inside.java/2021/09/10/what-are-modules-about/|What modules are about – Inside.java]] * [[https://www.youtube.com/watch?v=0xijKEeb5ug&ab_channel=IntelliJIDEAbyJetBrains|Java Modules in Real Life - YouTube]]