java创建模块并将模块打包成jre(windows环境)
1. 打包的源码目录结构及源码内容如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itranswarp.sample; public class Greeting { public String hello(String name) { return "Hello, " + name + "!"; } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itranswarp.sample; import javax.xml.XMLConstants; public class Main { public static void main(String[] args) { Greeting g = new Greeting(); System.out.println(g.hello(XMLConstants.XML_NS_PREFIX)); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 表示该模块必须引入java.base与java.xml包 module hello.world { requires java.base; // 可不写,任何模块都会自动引入java.base requires java.xml; }
2.切换到oop-module目录,在当前目录下编译所有的.java文件,并存放到bin目录下,命令如下:
E:\oop-module>javac -d bin src/module-info.java src/com/itranswarp/sample/*.java
编译成功,原来空白的bin目录下多了class文件:
src目录下的module-info.java被编译到bin目录下的 module-info.class;
src目录下的com/itranswarp/sample/Main.java 和 Greeting.java 被编译到bin/com/itranswarp/sample目录下的Main.class 和 Greeting.class
3.把bin目录下的所有class文件先打包成jar
// bin后面是空格再加点(.)表示当前目录 E:\oop-module>jar --create --file hello.jar --main-class com.itranswarp.sample.Main -C bin .
编译成功后,当前目录增加一个hello.jar文件
可以直接运行:java -jar hello.jar
4.把jar包转换成模块(.jmod)
jmod create --class-path hello.jar hello.jmod
编译成功后,当前目录下得到一个hello.jmod模块文件
可以直接运行:java --module-path hello.jar --module hello.world
5.打包成JRE文件,jlink裁剪程序用到的模块,并输出到jre目录
jlink --module-path hello.jmod --add-modules java.base,java.xml,hello.world --output jre/
6. 切换到jre/bin目录运行模块,这边运行的java程序其实就是bin目录中的java.exe文件