
本文旨在提供一个简洁明了的java模块创建指南。通过介绍`module-info.java`文件的编写、模块jar文件的正确组织结构,以及使用`jar`工具进行模块验证的方法,帮助开发者快速理解并实践java平台模块系统(jpms)中的基础模块化概念。
Java模块系统(JPMS),自Java 9引入,旨在提高Java应用的可靠性、安全性、性能和可维护性。它通过将代码组织成独立的模块,明确声明其依赖和导出的API,从而实现更强的封装性和更清晰的结构。创建一个简单的Java模块是掌握JPMS的第一步。
核心组件:module-info.java
创建Java模块的核心在于module-info.java文件。这个文件定义了模块的名称、它导出的包(即对其他模块可见的API),以及它所依赖的其他模块。对于一个只包含一个包的简单库,并且只依赖于java.base(所有Java模块隐式依赖的基础模块),module-info.java的内容会非常直接。
示例:module-info.java
假设你的库包含一个包org.foo.bar.pkgname,你希望将它暴露给其他模块使用。你的module-info.java文件将如下所示:
立即学习“Java免费学习笔记(深入)”;
module org.foo.bar { exports org.foo.bar.pkgname;}
module org.foo.bar:定义了模块的唯一名称。遵循反向域名约定是一个好的实践。exports org.foo.bar.pkgname:声明org.foo.bar.pkgname包中的所有公共类型(public classes and interfaces)都将对其他模块可见。
构建模块JAR文件
在编写完module-info.java文件和你的Java类之后,你需要将它们编译并打包成一个模块化的JAR文件。关键在于module-info.class文件必须位于JAR的根目录。
假设你的项目结构如下:
my-module-project/├── module-info.java└── org └── foo └── bar └── pkgname ├── X.java └── Y.java
编译步骤:
编译Java源文件:首先,你需要将module-info.java和你的所有Java类编译成.class文件。你可以创建一个输出目录(例如out)来存放这些编译后的文件。
# 假设当前工作目录是 my-module-projectjavac -d out module-info.java org/foo/bar/pkgname/*.java
这条命令会将module-info.class以及X.class、Y.class等编译后的类文件输出到out目录中,并保持原有的包结构。
小门道AI
小门道AI是一个提供AI服务的网站
117 查看详情
创建模块JAR文件:接下来,使用jar工具将out目录中的所有内容打包成一个模块化的JAR文件。
# 假设当前工作目录是 my-module-projectjar --create --file bar.jar -C out .
这条命令会创建一个名为bar.jar的模块化JAR文件。-C out .表示将out目录下的所有内容(包括module-info.class和编译后的类文件)打包到JAR的根目录。
模块JAR文件结构
一个有效的模块化JAR文件必须将module-info.class文件放置在其根目录。典型的内部结构应如下所示:
bar.jar (内部结构)├── module-info.class└── org └── foo └── bar └── pkgname ├── X.class └── Y.class
这种结构确保了JVM能够识别该JAR为一个模块。
验证模块
创建JAR文件后,你可以使用jar –describe-module命令来验证它是否被正确识别为一个Java模块,并查看其模块描述信息。
jar --describe-module --file bar.jar
如果一切设置正确,你将看到类似以下的输出:
bar.jar module org.foo.bar@ exports org.foo.bar.pkgname
(注意:如果创建JAR时没有指定–module-version,版本号可能不会显示或显示为unnamed)
这表明bar.jar已被成功识别为名为org.foo.bar的模块,并导出了org.foo.bar.pkgname包。
注意事项与最佳实践
模块名称唯一性: 模块名称应是唯一的,并且通常建议使用反向域名约定,以避免命名冲突。依赖声明: 简单模块可能只依赖于java.base。如果你的模块需要其他JDK模块(如java.sql, java.xml)或第三方库,你需要在module-info.java中使用requires指令明确声明这些依赖。工具链: 虽然上述示例使用了javac和jar命令行工具,但在实际项目中,通常会使用Maven或Gradle等构建工具来自动化模块的编译、打包和依赖管理。这些工具提供了更便捷的方式来配置和构建模块。强封装性: 模块系统强制执行强封装。只有通过exports导出的包才对其他模块可见。未导出的包中的类型在模块外部是无法访问的,即使它们是公共类型。
总结
创建一个简单的Java模块涉及定义module-info.java文件来声明模块的名称和导出的包,然后将编译后的module-info.class与你的类文件一起打包成一个特定结构的JAR。最后,使用jar –describe-module命令可以方便地验证模块的正确性。掌握这些基础知识是深入理解和利用Java模块系统强大功能的第一步。
以上就是Java模块化入门:创建并验证一个简单模块的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/573769.html
微信扫一扫
支付宝扫一扫