Java模块

一、编写模块

  1. idea中项目下右键创建module-info.java文件

  2. 编译当前目录下所有的.java文件,并存放到bin目录下:在bin目录下会得到module-info.class文件:

    javac -d bin src/main/java/module-info.java src/main/java/org/example/*.java

  3. 把bin目录下的所有class文件先打包成jar,通过--main-class参数,让jar包自己定位main方法所在的类:当前目录下会得到hello.jar包

    jar --create --file hello.jar --main-class org.example.Main -C bin .

  4. 使用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

  1. 通过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目录打个包给对方发过去,对方直接运行上述命令即可 

五、模块访问权限

  1. class的访问权限只在同一个模块内有效,模块和模块之间的访问,例如,a模块要访问b模块的某个class,必要条件是b模块明确地导出了可以访问的包

  2. 如果想让外部代码访问到hello.world模块中的org.example.Greeting类,我们必须将其导出   
    exports org.example;

  3. 因此:模块进一步隔离了代码的访问权限

posted @   sTruth  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示