module-info.java是Java 9新增的文件,它用来描述一个模块(Module),模块是一个可以被Java虚拟机(JVM)加载的程序包,它可以将程序包分组,以提高程序的安全性和管理性。
module-info.java的结构
module-info.java文件是一个普通的Java源文件,它包含一个模块声明,模块声明是用module关键字定义的,它由模块名称、模块依赖、模块导出、模块开放以及模块服务等部分组成:
module <模块名称> { requires <模块依赖>; exports <模块导出>; opens <模块开放>; uses <模块服务>; provides <模块提供> with <模块实现>; }
模块声明
模块声明是一个模块的定义,它由一个module关键字和一个模块名称组成,模块名称是一个标识符,它必须与模块的文件夹名称相同,模块声明可以有0个或多个模块指令:
module <模块名称> { <模块指令>; ... }
模块依赖
模块依赖是指当前模块依赖其他模块,它由一个requires关键字和一个模块名称组成,模块依赖可以有0个或多个:
module <模块名称> { requires <模块依赖1>; requires <模块依赖2>; ... }
模块导出
模块导出是指将当前模块中的某些包导出给其他模块使用,它由一个exports关键字和一个包名称组成,模块导出可以有0个或多个:
module <模块名称> { exports <包1>; exports <包2>; ... }
模块开放
模块开放是指将当前模块中的某些包开放给其他模块使用,它由一个opens关键字和一个包名称组成,模块开放可以有0个或多个:
module <模块名称> { opens <包1>; opens <包2>; ... }
模块服务
模块服务是指当前模块中的某些接口可以被其他模块使用,它由一个uses关键字和一个接口名称组成,模块服务可以有0个或多个:
module <模块名称> { uses <接口1>; uses <接口2>; ... }
模块提供
模块提供是指当前模块中的某些类可以被其他模块使用,它由一个provides关键字和一个类名称组成,模块提供可以有0个或多个:
module <模块名称> { provides <类1> with <类实现1>; provides <类2> with <类实现2>; ... }
使用方法
在模块中创建一个module-info.java文件,在文件中定义模块的名称、依赖、导出、开放、服务和提供,编译模块,即可将模块加载到JVM中。