Module chứa package, có module descriptor: tên module, dependencies (requires), exported packages (exports).
module com.tutorialspoint.app {
requires com.tutorialspoint.services;
exports com.tutorialspoint.app.util;
}
Java 9 cung cấp 3 compilation mode:
1. Legacy Mode
- Kích hoạt khi
--source,--target,--release≤ 8. - Compiler hành xử như Java 8: dùng
-classpath,-sourcepathtruyền thống. - Không dùng module options (
--module-path,--module). - Code chạy như unnamed module tại runtime.
- Dùng cho: migrate dần, build legacy project chưa modular.
2. Single Module Mode
- Kích hoạt khi compilation environment ≥ 9 VÀ KHÔNG dùng
--module-source-path. - Code tổ chức theo package hierarchy truyền thống.
- Có
module-info.javatại root source. - Chạy trên module-path (không phải classpath).
- Chỉ 1
module-info.javatrong source tree → "single module". - Cấu trúc:
src/
module-info.java
com/
example/
MyClass.java
3. Multi-Module Mode
- Kích hoạt khi compilation environment ≥ 9 VÀ dùng
--module-source-path. - Nhiều module dưới cùng 1 source root.
- Mỗi module trong subdirectory riêng.
- Compile-time:
--module-source-pathchỉ định root source. - Cấu trúc:
src/
moduleA/
module-info.java
com/example/a/
moduleB/
module-info.java
com/example/b/
So sánh 3 mode
| Mode | Java Version | --module-source-path | Module-info.java | Classpath/Modulepath |
|---|---|---|---|---|
| Legacy | ≤ 8 | Không dùng | Không có / bỏ qua | Classpath |
| Single Module | ≥ 9 | Không dùng | 1 file tại root | Module-path |
| Multi-Module | ≥ 9 | CÓ | Nhiều file, mỗi module 1 | Module-path |
Ví dụ compile Multi-Module
javac --module-source-path src -d out $(find src -name "*.java")
Hiểu 3 mode giúp cấu hình build đúng cho project modular, legacy, hoặc hybrid.