jdk9模块化--引用模块

访客 阅读:184 2022-04-08 10:52:21 评论:0

上一次简单写了一个module并进行调用,这次会尝试模块间引用其他模块
首先列出所有文件

+--src 
	+--com.moduleA 
		+--module-info.java 
		+--com 
			+--moduleA 
				+--ModuleA.java 
	+--com.main 
		+--com 
			+--main 
				+Main.java 

模块引用

moduleA的module-info

module com.moduleA { 
    exports com.moduleA; 
} 

ModuleA.java

package com.moduleA; 
public class ModuleA { 
    public void doModule() { 
        System.out.println("from module1"); 
    } 
} 

main的module-info

module com.main { 
    requires com.moduleA; 
} 

Main.java

package com.main; 
import com.moduleA.*; 
public class Main { 
    public static void main(String[] args) { 
        ModuleA m1=new ModuleA(); 
		m1.doModule(); 
    } 
} 

在src同级目录运行下面命令进行编译

>javac -d mods/com.moduleA src\com.moduleA\module-info.java src\com.moduleA\com\moduleA\ModuleA.java 
 
>javac --module-path mods -d mods/com.main src/com.main/module-info.java src/com.main/com/main/Main.java 

然后就可以运行main模块了

>java --module-path mods -m com.main/com.main.Main 
from module1 

找不到模块

模块编译时如果缺少对应的申明会被校验

缺少模块

删除生成的moduleA,运行main,会有如下报错

Error occurred during initialization of boot layer 
java.lang.module.FindException: Module com.moduleA not found, required by com.main 

就算程序中没有使用到对应的模块,只要缺少requires中的包就会提示以上错误。

缺少export

当对moduleA不进行export,在编译main时会出现,同样javac也可以识别出moduleA的存在,以及它并未被导出

src\com.main\com\main\Main.java:2: 错误: 程序包 com.moduleA 不可见 
import com.moduleA.*; 
          ^ 
  (程序包 com.moduleA 已在模块 com.moduleA 中声明, 但该模块未导出它) 
1 个错误 

缺少require

当main的module-info中不标明requires modualA,编译时就会出现如下错误,值得注意的是javac能识别出已经存在的moduleA,并说明了未读取该模块

src\com.main\com\main\Main.java:2: 错误: 程序包 com.moduleA 不可见 
import com.moduleA.*; 
          ^ 
  (程序包 com.moduleA 已在模块 com.moduleA 中声明, 但模块 com.main 未读取它) 
1 个错误 

当main不require,moduleA也不export的情况下,会优先显示该错误,所以javac首先会找到该类,然后通过export和requires进行控制。

export范围

在module-info中定义达的export,是暴露一个package下所有类,且需不会读取子package的内容,例如com.modulaA只会export该package下的类,其子package下的类并不会被包含在内,如果子package中的类被引用会提示缺少export同样的模块未导出。


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

一个IT知识分享的公众号