阿里云java进阶干货Java学习笔记

Java9新特性系列(模块化系统: Jigsaw->Mod

2018-01-31  本文已影响185人  史培培
题图:by pixel2013 From pixabay

模块化的前时代

Ant时代
相信大家对Ant都不陌生,Ant是任务型的,定义了一系列的任务dir/compile/jar等等,缺点是操作文件
Maven时代
Maven/Gradle相对于Ant,增加了groupId/artifactId,版本管理,依赖管理
OSGI时代
OSGI用的比较少,估计大家比较陌生,其实我们用的Eclipse及插件都是OSGI编译的

那么问题来了:当代码库越来越大,怎么管理类库交叉依赖,以及类重复的问题呢?

产生背景及意义

设计理念

模块独立,化繁为简
模块化(以 Java 平台模块系统的形式)将JDK分成一组模块,可以在编译时,运行时或者构建时进行组合。

实现目标

使用举例

模块将由通常的类和新的模块声明文件(module-info.java)组成。
该文件是位于 java 代码结构的顶层,该模块描述符明确地定义了我们 的模块需要什么依赖关系,以及哪些模块被外部使用。在 exports 子 句中未提及的所有包默认情况下将封装在模块中,不能在外部使用。
工程目录结构:



分两个module:

dog-module中类如下:

package net.hellomypastor.java9.entity;

public class Dog {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在src目录下新建module-info.java:


module dog_module {
    exports net.hellomypastor.java9.entity;
}

exports:控制着哪些包可以被其它模块访问到。所有不被导出的包 默认都被封装在模块里面

main-module中类如下:

package net.hellomypastor.java9;

import net.hellomypastor.java9.entity.Dog;

public class MyModule {

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("dog2018");
        dog.setAge(1);
        System.out.println("happy new year 2018");
        System.out.println(dog.getName());
        System.out.println(dog.getAge());
    }
}

在src目录下新建module-info.java:


module main_module {
    requires dog_module;
}

requires:指明对其它模块的依赖

上一篇 下一篇

猜你喜欢

热点阅读