Java模块
一、编写模块
-
idea中项目下右键创建module-info.java文件
-
编译当前目录下所有的.java文件,并存放到bin目录下:在bin目录下会得到module-info.class文件:
javac -d bin src/main/java/module-info.java src/main/java/org/example/*.java
-
把bin目录下的所有class文件先打包成jar,通过--main-class参数,让jar包自己定位main方法所在的类:当前目录下会得到hello.jar包
jar --create --file hello.jar --main-class org.example.Main -C bin .
-
使用JDK自带的jmod命令把jar包转换成模块:当前目录下得到hello.jmod模块文件
使用JAVA_HOME的完整路径执行:/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/jmod create --class-path hello.jar hello.jmod
mac查看JAVA_HOME命令:/usr/libexec/java_home -V
二、运行模块
通过 java --module-path hello.jar --module hello.world 运行
可使用 java -jar xxx.jar 运行jar包
三、打包JRE
-
通过jlink命令将系统安装的JRE复制一份,并且将不使用的模块删除
jlink --module-path hello.jmod --add-modules java.base,java.xml,hello.world --output jre/
--module-path参数:指定自己的模块hello.jmod
--add-modules参数:指定我们用到的其他模块 java.base、java.xml和hello.world(用,分隔)
--output参数:指定输出目录运行后,在当前目录下,得到jre目录,这是一个完整的并且带有我们自己hello.jmod模块的JRE
四、运行jre
jre/bin/java --module hello.world
要分发我们自己的Java应用程序,只需将jre目录打个包给对方发过去,对方直接运行上述命令即可
五、模块访问权限
-
class的访问权限只在同一个模块内有效,模块和模块之间的访问,例如,a模块要访问b模块的某个class,必要条件是b模块明确地导出了可以访问的包
-
如果想让外部代码访问到hello.world模块中的org.example.Greeting类,我们必须将其导出
exports org.example; -
因此:模块进一步隔离了代码的访问权限
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)