module-info.java什么意思?

博主在新版Eclipse中遇到module-info.java文件,尝试保留该文件后,导入Apache Logging的Logger类时遇到权限问题。报错提示类不可访问。研究后推测module-info.java可能与许可配置有关,类似于Go的模块管理。博主认为这种设计可能出于安全考虑,并计划进一步试验。

module-info.java什么意思,新版的eclipse一出来就看到这个文件,抱着试一试的心态。留着它。

结果导入类的时候发现出岔子了。

导类动作如下:

import org.apache.logging.log4j.core.Logger;

报错如下:

The type org.apache.logging.log4j.core.Logger is not accessible

上网搜了下,就是要加载的类不被许可类似这个意思。

也就是这货和go-module一样,是放许可的。

真是感觉天下的编程好雷同啊。这么设计的好处除了安全,还有什么呢。等我先试用一段时间之后再说。

### module-info.java 的用途和作用 在 Java 模块化系统(Java Platform Module System,JPMS)中,`module-info.java` 文件是模块的核心声明文件。它的主要作用是定义模块的元信息,包括模块名称、依赖关系以及对外可见的包集合。以下是 `module-info.java` 的具体用途和作用: 1. **模块命名** `module-info.java` 文件的第一个功能是为模块指定一个唯一的名称。这个名称类似于小区的名字,用于标识模块的身份。模块名必须符合 Java 包名的命名规范,并且通常以反向域名的形式表示[^1]。 2. **声明模块依赖** 通过 `requires` 关键字,`module-info.java` 明确指定了当前模块需要依赖的其他模块。这些依赖可以分为以下几种类型: - **普通依赖**:使用 `requires` 声明的依赖是强制性的,意味着如果运行时缺少这些模块,程序将无法启动。 - **传递依赖**:使用 `requires transitive` 声明的依赖会自动传递给依赖当前模块的其他模块。例如,如果模块 A 依赖模块 B,并且模块 B 声明了传递依赖 C,则模块 A 也可以访问模块 C[^2]。 - **静态依赖**:使用 `requires static` 声明的依赖仅在编译时有效,运行时可以选择性地存在或不存在。 3. **控制包的可见性** 默认情况下,模块中的包是不可见的,其他模块无法直接访问。通过 `exports` 关键字,`module-info.java` 可以明确指定哪些包对外可见。这种机制增强了模块的安全性和封装性,避免不必要的外部访问[^1]。 4. **提供服务支持** `module-info.java` 还可以通过 `uses` 和 `provides` 关键字来声明服务的使用和服务的提供。这使得模块间的服务发现更加规范化和可控[^2]。 ### 示例代码 以下是一个典型的 `module-info.java` 文件示例,展示了如何定义模块名、声明依赖以及导出包: ```java module com.example.myapp { requires java.base; // 默认依赖基础模块 requires transitive java.sql; // 传递依赖 requires static java.logging; // 静态依赖 exports com.example.myapp.api; // 导出 api 包供其他模块使用 uses com.example.myapp.spi.MyService; // 声明使用的服务接口 provides com.example.myapp.spi.MyService with com.example.myapp.impl.MyServiceImpl; // 提供服务实现 } ``` ### 总结 `module-info.java` 是 Java 模块化系统的核心组成部分,它通过明确的声明方式定义了模块的名称、依赖关系以及对外可见的包集合。这种机制不仅增强了模块间的隔离性,还提高了系统的可维护性和安全性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值