Java模块依赖:深入解析与实践指南
立即解锁
发布时间: 2025-08-18 02:22:41 阅读量: 1 订阅数: 8 

### Java模块依赖:深入解析与实践指南
#### 1. 运行示例
可以使用命令提示符运行示例,需要将`com.jdojo.person`和`com.jdojo.address`模块的编译后目录或模块化JAR文件包含在模块路径中。
- **使用编译类目录运行**:
```plaintext
C:\Java9Revealed>java --module-path
com.jdojo.person\build\classes;com.jdojo.address\build\classes
--module com.jdojo.person/com.jdojo.person.Main
```
- **使用模块化JAR文件运行**:
当构建包含模块的NetBeans项目时,模块的模块化JAR文件会存储在项目目录的`dist`目录中。构建`com.jdojo.person`项目后,可使用以下命令运行示例:
```plaintext
C:\Java9Revealed>java --module-path
com.jdojo.person\dist;com.jdojo.address\dist
--module com.jdojo.person/com.jdojo.person.Main
```
#### 2. 示例故障排除
在首次使用JDK 9时,可能会遇到以下几种错误情况:
| 错误类型 | 错误信息 | 原因 | 解决方案 |
| --- | --- | --- | --- |
| 空包错误 | `error: package is empty or does not exist: com.jdojo.address`<br>`exports com.jdojo.address;`<br>`^`<br>`1 error` | 编译`com.jdojo.address`模块的模块声明时,未包含`Address`类的源代码 | 确保导出的包中至少定义了一个类型 |
| 模块未找到错误 | `error: module not found: com.jdojo.address`<br>`requires com.jdojo.address;`<br>`^`<br>`1 error` | 编译`com.jdojo.person`模块的模块声明时,模块路径中未包含`com.jdojo.address`模块 | 使用`--module-path`选项指定`com.jdojo.address`模块的模块路径;若使用NetBeans,参考前面的部分配置模块路径 |
| 包不存在错误 | `error: package com.jdojo.address does not exist`<br>`import com.jdojo.address.Address;`<br>`^`<br>`error: cannot find symbol`<br>`private Address address = new Address();`<br>`^`<br>`symbol: class Address`<br>`location: class Person` | 编译`com.jdojo.person`模块中的`Person`和`Main`类时,模块声明中未添加`requires`语句 | 在`com.jdojo.person`模块的模块声明中添加`requires com.jdojo.address`语句,并将`com.jdojo.address`模块添加到模块路径中 |
| 模块解析异常 | `Error occurred during initialization of VM`<br>`java.lang.module.ResolutionException: Module com.jdojo.person not found` | 命令提示符运行示例时,模块路径指定不正确;或模块路径正确,但指定目录或模块化JAR文件中没有编译代码 | 确保模块化JAR文件存在;若使用展开目录中的模块代码运行示例,确保在NetBeans中编译项目 |
#### 3. 隐式可读性
如果一个模块可以读取另一个模块,而第一个模块的声明中没有包含读取第二个模块的`requires`语句,则称第一个模块隐式读取第二个模块。每个模块都隐式读取`java.base`模块,且隐式读取不限于`java.base`模块。
以下是一个示例:
- 创建了`com.jdojo.address`和`com.jdojo.person`两个模块,`com.jdojo.person`模块读取`com.jdojo.address`模块:
```java
module com.jdojo.person {
requires com.jdojo.address;
...
}
```
- 创建`com.j
0
0
复制全文
相关推荐










