示例说明
为了让大家对jigsaw有一个直观的了解,本课程使用一个小的示例来对其进行说明。
这个示例很简单,它是一个普通的多模块工程(非maven工程),主工程名为jigsaw-hello,其包括两个子模块:
application模块:只定义一个类,这是一个bean(Student)
persistense模块:定义一个类,用来模拟完成对Student的持久化
使用Idea创建工程



application模块代码如下:
包名:com.dokbok.jigsaw.application 源代码文件名:Student.java
package com.dokbok.jigsaw.application;
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在src的目录下添加一个module-info.java的文件:
module application {
exports com.dokbok.jigsaw.application;
}
Persistense模块代码如下:
包名:com.dokbok.jigsaw.persistense 源代码文件名:Service.java
package com.dokbok.jigsaw.persistense;
import com.dokbok.jigsaw.application.Student;
public class Service {
public Service(){
Student student = new Student();
student.setName("tdj");
System.out.println("student save success: " + student.getName());
}
public static void main(String[] args) {
new Service();
}
}
同样,在src的目录下添加一个module-info.java的文件:
module persistense {
requires application;
}
目录整体结构如下:

编译与运行
1、编译成class
进入idea的Terminal的窗口,在父项目(jigsaw-hello)的目录下执行编译命令:
#输入命令pwd查看当前目录是否正确
$ pwd
/d/develop/java/bytebirth/jigsaw-hello
#执行编译,记住要按照依赖的顺序编译,先编译application,再编译persistense,是因为它依赖application
javac -d out --module-source-path "./*/src" --module application
javac -d out --module-source-path "./*/src" --module persistense
2、运行
java --module-path out -m persistense/com.dokbok.jigsaw.persistense.Service
3、打包成jar后运行
我们也可以将模块打包成jar文件后运行,注意打包jar的文件之前也是需要使用javac先编译两个模块的,也就是本步骤依赖于上面步骤1(编译成class)的。
#我们将打包后的jar文件放置在jar目录下,所以需要先创建该目录,打包完成后该文件夹下会包含两个文件:
mkdir jar
jar --create --file=jar/application-1.0.jar --module-version=1.0 -C out/application/ .
jar --create --file=jar/persistense-1.0.jar --module-version=1.0 -C out/persistense/ .
#运行模块persistense
java --module-path jar -m persistense/com.dokbok.jigsaw.persistense.Service