浅谈 Java 9 的模块化系统
什么是模块?
一个模块是代码的集合。它以依赖关系的形式持有类,数据和其他模块。它与JAR文件类似,但更好。每个模块都包含一个module-info.java
文件,它可以让我们明确地设置必要的信息。包括它依赖的其他模块以及其他模块可以访问的内容。
这是一种更好的方式,可以为程序员共享代码并进行协作减少一些兼容性的问题。
如何使用模块?
一个模块包含一个module-info.java
文件 ,它包含了模块的基本信息,比如它依赖哪些模块、它的哪些部分能被其他模块访问等。
最主要的关键词是requires
和exports
。
现在,我们来写举几个简单的例子:
module Decoder {
requires Reader;
exports com.decoder;
}
上面的这个例子表明了Decoder模块依赖于Reader模块。
下一行则声明其他模块只能访问com.decoder
包以内的内容。
module Reader {
exports org.reader;
}
这个例子声明Reader模块不依赖于别的模块,
其他模块只能访问org.reader
包以内的内容。
下面两个类分别位于Reader模块和Decoder模块。
Decoder模块通过Reader模块的Scanner类来读取内容。
org/reader/Scanner.java:
package org.reader;
public class Scanner {
public static String read() {
return "这是一段文本";
}
}
com/decoder/Main.java:
package com.decoder;
import org.reader.Scanner;
public class Main {
public static void main(String[] args) {
System.out.format("从Scanner中读取到: %s %n", Scanner.read());
}
}
模块系统的特性
- 提高安全性,模块系统可以让我们隐藏那些我们不想暴露出来的类,具有极高的封闭性。
- 提高项目的可维护性。修改一个模块内的代码不会影响到其他的模块。当你把项目分成许多个模块之后,你只需要重新编译改动的模块,而不再需要重新编译整个项目。
- 更加容易地测试。