Java9 新特性 模块化

本文介绍了Java9中的模块化特性,包括在Maven项目结构中如何使用`module-info.java`定义模块、依赖关系的管理以及如何处理反射权限。特别关注了如何在`module-info.java`中声明导出、引入和使用其他模块的细节。
摘要由CSDN通过智能技术生成

Java9 新特性 模块化

项目结构

在这里插入图片描述

父类pom 配置

  <name>chaloubuq02</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>m1</module>
    <module>m2</module>
  </modules>

m1模块配置

 <parent>
    <groupId>org.example</groupId>
    <artifactId>chaloubuq02</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>m1</artifactId>
<packaging>jar</packaging>

<name>m1</name>
<url>http://maven.apache.org</url>

m2模块配置

    <parent>
        <groupId>org.example</groupId>
        <artifactId>chaloubuq02</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>m2</artifactId>
    <packaging>jar</packaging>

    <name>m2</name>
    <url>http://maven.apache.org</url>

m2模块依赖m1模块

<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>m1</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

项目具体结构

在这里插入图片描述

我们可以用 java --list-modules 查看当前模块

这个时候 我们使用 module-info.java 来定义模块

m1模块的module-info.java

module m1 {
    exports com.test;
//    暴露这个包,让m2可以使用

//    exports com.test to m2;
//    指定暴露给m2
    
//    需要用什么包 就导入什么包
//    这样导入 m1可以用,但是m2不能用
    requires java.logging;
//    这样导入 m1可以用,m2也可以用
    requires transitive java.logging;

//    我们还可以指定模块需要使用的抽象类或是接口实现:
    uses com.test.Test;

}

如果m2想要反射m1的类,需要在m1 同意m2反射

open module module.a {   //直接添加open关键字开放整个模块的反射权限
    exports com.test to module.b;
}

也可以这么写

module module.a {
    exports com.test to module.b;
    opens com.test;   //通过使用opens关键字来为其他模块开放反射权限
  	//也可以指定目标开放反射 opens com.test to module.b;
}

m2模块的module-info.java

module m2 {
//    导入m1
    requires m1;
//    声明此模块提供了Test的实现类
    provides com.test.Test with com.study.TestImpl;
}

其他的dependency的引入

同样当maven 引入其他的dependency的时候,也要在module-info.java中声明

比如dependency中有lombok,我们需要在module-info.java中声明

module com.test {
    requires lombok;   //lombok模块
    requires java.logging;    //JUL日志模块,也需要使用到
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值