Java 11 ( 1 ) 模块化

Submitted by Lizhe on Wed, 09/26/2018 - 15:55

Java9 和 Java10 都不是长期支持版本, 而且Java9的改动非常大, Oracle于昨天 2018年9月25日更新了JavaSE 11

所以想拿出来研究一下, 这里特别强调是JavaSE 11 是因为EE已经跟这个没关系了

因为之前java9就没仔细看, 现在放在一起记录一下

 

环境准备:

这里我建议还是用虚拟机, 因为当前的真实开发环境中很多都是java8的, 不要直接升级成11

这里我在Mac上所以直接用了vagrant, 安装过程也很简单, oracle官网下载完rpm包之后直接yum安装就可以了

 

首先来个helloworld

代码结构如下

20180926040133

这里需要注意的是

1. workspace/helloworld 是我的模块根路径

2. com.lizhe.Hello.java 是入口类

3. out文件夹是编译输出目录

4. workspace/module-info.java 是模块说明类 (必需)

对于Hello.java本身没有什么特别要说明的, 特殊的地方在于最后一个module-info.java, 它需要被放置在模块根路径下

内容为空

module helloworld{

}

 

直接编译

javac -d out/helloworld helloworld/com/lizhe/Hello.java helloworld/module-info.java

运行方式

java --module-path ./out --module helloworld/com.lizhe.Hello

 

打包成jar

[root@localhost workspace]# mkdir mods

[root@localhost workspace]# jar -cfe ./mods/helloworld.jar com.lizhe.Hello -C out/helloworld .

[root@localhost workspace]# 

cf 表示创建新jar文件, e表示入口类

因为已经标识了入口类,所以运行jar更简单一些

[root@localhost workspace]# java --module-path mods --module helloworld

hello world

[root@localhost workspace]# 

 


 

下面我要将上面的helloworld模块拆分成两个模块

App 模块(负责调用) 和 Speaker 模块 (负责输出)

 

20180926060001

 

 

 

 

[root@localhost workspace]# javac -d ./out --module-source-path ./src -m app

[root@localhost workspace]# java --module-path ./out --module app/com.lizhe.app.Starter

hello world

[root@localhost workspace]#