Java9 模块化 Jigsaw 入门指引

Java9正式版马上就要发布了,这里笔者先介绍下Java9 的模块化具体是怎么回事。


相比于Java,其实js领域很早就进行了模块化了。闲话少扯。今天我们来看看Java9是怎么做到模块化的。

熟悉Java的同学都知道,在Java(1--->8)之前,使用的都是一个很大的jar文件rt.jar 这个jar包在Java8 中有60多M.并且,在我们的Java代码运行时,还需要tools.jar这个jar,这个jar也不小。

也有十几M。这两个文件是运行一个Java程序最小的所需环境。也就是说运行一个Helloworld java程序也需要引入几十M的jar。

如果是在JavaEE的环境中。那么情况将变得更加复杂。


Java9 模块化 Jigsaw 入门指引


模块化可以让让JavaSE的程序更加轻量级更加容易部署。


模块就是代码和数据的封装体,代码是指一个packages,就是以前我们写的一个个的包。而模块是一个或者多个包的集合体。

我们这里可以看一下Java模块化的配置文件。


module module1 {
    //间接引用了java.sql模块
    requires transitive java.sql;
    exports org.huluo.module1;
}

上面的配置文件只导出了一个包org.huluo.module1

也就是说该模块的org.huluo.module1包下的class可以被引用。模块下的其他包中的类就算是public 修饰的类其他模块也不能引用到。这个话题后面会讲述到。

上面的配置文件做了三件事情,定义了模块module1,间接引用了java.sql模块和将org.huluo.module1包导出。


还有,在Java9中,public 访问修饰符不再意味着可以访问了。

模块之间的关系被称作readability(可读性),代表一个模块是否可以找到这个模块文件,并且读入系统中(注意:并非代表可以访问其中的类型)。在实际的代码,一个类型对于另外一个类型的调用,我们称之为可访问性(Accessible),这意味着可以使用这个类型; 可访问性的前提是可读性,换句话说,现有模块可读,然后再进一步检测可访问性(安全)。


Java9 模块化 Jigsaw 入门指引

Java9 模块化 Jigsaw 入门指引


在介绍一下什么是模块的Transitive引用(间接引用)

当我们的模块2引用了模块1,如果模块1引用了java.sql模块。实际上模块2是引用不到java.sql模块的。

但是如果我们将模块1的引用申明为间接引用了java.sql模块,则模块2可以引用到java.sql模块。

这个跟maven的依赖传递有点类似。


下面是demo工程:http://download.csdn.net/download/u013803262/9972059

参考自:http://www.jianshu.com/p/053a5ca89bbb