JDK9引入了模块系统,这篇笔记简单介绍了引入module机制的初衷,module的定义、使用与打包。
Overview
没有引入module之前的JDK8项目结构如下,一个项目下的代码按照package进行组织。
引入了module之后的项目结构如下,在package之上还有一个module层次。
为什么引入module?
- Reliable configuration,在module之前,JVM通过classpath查找各个类,如果某个类缺失,只有当使用到这个类的时候才会发现,使用module可以清晰地配置各个module之间的依赖关系。
- Strong encapsulation,使用module机制可以定义一个module中那些包是对module外可见的,这就又添加了一层访问控制,增加了封装程度。
- Scalable Java platform,使用module之后,原先包含大量代码的Java SE被分割成95个module,代码更加容易维护。而且你可以只选择需要的module,例如在一些嵌入式设备上,如果不需要GUI,完全可以不把GUI模块包含在Java runtime中。
- Greater platform integrity,有些内部API是供内部使用的,不是给应用开发人员使用的,但是这些API在module机制之前能够被访问到,由于这些内部API有部分是平台相关的,使用这些API不利于各个平台统一(platform integrity),而module添加了一层访问控制,使得一些内部的API真正意义上地被隐藏了起来。
- Improved performance,性能更好了,具体为什么更好请查看JSR376
实践
下面使用如下的项目结构说明对模块的各种操作,项目分为两个模块 utils
和 test
模块,我会依次介绍模块的定义、模块的调用、模块的运行。
.
├── test
│ ├── module-info.java
│ └── org
│ └── example
│ └── test
│ └── TestStringUtils.java
└── utils
├── module-info.java
└── org
└── example
└── utils
└── StringUtils.java
8 directories, 4 files
StringUtils.java
的内容:
package org.example.utils;
public class StringUtils {