到现在了,都快java17了,可是对于java9的module对于正式生产的使用文章少之又少,由于可以分模块打包,在加上graalvm的native image,对于云原生发布支持很好,这里记录下笔记.
先使用jdeps --class-path [classpath路径] [xxx/xxx/xx(类名路径)] 查看依赖关系
如果有版本冲突 加上 --multi-release 11(jdk版本号)
是的,目前是需要把所有依赖加到module-info配置里,不知道是不是我姿势不对
module-info.java
open module { //使用open关键字,可以用于spring对自己的项目的类进行反射
requires spring.boot;
exports com.xx.xxxx;
}
关键字:
requires
exports
open
use 服务使用
provide 服务提供
with
to
transitive 隐式传递依赖
static 编译强制,运行可选
模块类型:
普通模块(Normal Modules)
开放模块(Open Modules)
自动模块(Automatic Modules)
未命名模块(Unnameed Modules)
扩展:
Java 9的最新版本允许库开发人员使用JAR文件清单META-INF/MANIFEST.MF文件属性'Automatic-Module-Name'来指定其自动模块名称
比如Automatic-Module-Name: spring.boot
java9开始提供多版本jar,可以根据当前环境jdk版本自动选择合适的jar,通过ServiceLoader.load方法在META-INF/services目录指定的实现类
模块化jar文件
打包jmod文件
jlink:精简,只打包需要的api