Java9新特性——module模块系统

本文详细介绍了Java9中的模块系统,包括模块化的背景、Jigsaw项目的目标、如何创建和运行模块,以及模块设计的目标和注意事项。通过一个HelloWorld示例,解释了模块的创建、编译、打包和运行过程,强调了模块化对于解决Jar Hell问题和提升性能的重要性。同时,文章还提到了模块系统的相关工具,如jlink、jdeps和jmod的使用。
摘要由CSDN通过智能技术生成

关于 java9的新特性,官方原文:https://docs.oracle.com/javase/9/whatsnew/toc.htm

这玩意就是一个列表,具体的技术细节需要根据官方文档挖一挖。

modular-模块系统

java9的模块化,从一个独立的开源项目而来,名为Jigsaw。

项目官网:http://openjdk.java.net/projects/jigsaw/

为什么要使用模块化

java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows里的dll hell。

比如我们启动一个不算大的应用,但依赖了很多的jar,如下图:

摘自:Mark Reinhold的演讲 https://www.youtube.com/watch?v=l1s7R85GF1A

这是很常见的。虽然你可以使用 “java -Djava.ext.dirs=lib xxx” 让命令行小一些,但不可否认,他的classpath就是那么长。顺便说一句,java9中不允许使用extdirs了。

另一方面,jdk本身有很多的api:

对于一些小设备,它太庞大了。

helloworld

还是习惯先来一个helloworld。在此之前,需要先检查一下你的java版本:

java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

如果不是java9,而是 1.8、1.7,那么慢走不送。

创建主类

首先创建一个java类,就叫Demo吧。

文件保存为:src/com/pollyduan/modular/Demo.java

package com.pollyduan.modular;

public class Demo{
    public static void main(String[] args){
        System.out.println("hello modular.");
    }
}

编译:
$ javac -d classes src/**.java
$ tree .
.
├── classes
│   └── com
│       └── pollyduan
│           └── modular
│               └── Demo.class
└── src
    └── com
        └── pollyduan
            └── modular
                └── Demo.java

打包jar并执行
$ mkdir lib

$ jar cvf lib/demo.jar -C classes .

$ java --class-path lib/demo.jar com.pollyduan.modular.Demo

hello modular.

–class-path 开关可以简写:

$ java -cp lib/demo.jar com.pollyduan.modular.Demo

当然我们可以为jar指定主类,来简化运行:

Main-Class: com.pollyduan.modular.Demo

需要在MANIFEST.MF 中增加上面一行,即可直接运行:

$ java -jar lib/demo.jar

创建模块

src/module-info.java

module hello{}

我们写了一个空的模块,命名为hello。

编译模块
$ javac -d classes src/**.java

反编译看一下:

$ javap classes/module-info.class
Compiled from "module-info.java"
module hello {
  requires java.base;
}

为什么我们写了一个空的模块,反编译多了一行?先不用管,后面会说明为什么。

打包模块
$ jar cvf lib/hello.jar -C classes .
$ jar tf lib/hello.jar
META-INF/
META-INF/MANIFEST.MF
module-info.class
com/
com/pollyduan/
com/pollyduan/modular/
com/pollyduan/modular/Demo.class

运行模块
$ java --module-path lib -m hello/com.pollyduan.modular.Demo

h
  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

区块恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值