聊聊Java9的Jigsaw特性

HotSpot JAVA9发布以来,新发布的特性中,Jigsaw比较受人关注。今天就用一个例子,概要的看看这个新发布的特性(例子参考Open JDK9的示例)。当然对内容了解不深,只是泛泛而谈。

创建两个目录src/com.greetings和src/org.astro,一个表示requires,另一个表示exports。

创建文件目录:

mkdir -p src/com.greetings/com/greetings

创建文件:

cat src/org.astro/module-info.java
module org.astro {
      exports org.astro;
}

cat src/org.astro/org/astro/World.java
package org.astro;
public class World {
     public static String name() {
         return "world";
     }
}

cat src/com.greetings/module-info.java
module com.greetings {
      requires org.astro;
}

cat src/com.greetings/com/greetings/Main.java
package com.greetings;
import org.astro.World;
public class Main {
     public static void main(String[] args) {
         System.out.format("Greetings %s!%n", World.name());
     }
}

创建编译class文件存放文件夹:

$ mkdir -p mods/org.astro mods/com.greetings

执行编译命令

$ javac -d mods/org.astro src/org.astro/module-info.java src/org.astro/org/astro/World.java

javac -d表示“指定放置生成的类文件的位置”。

$ javac --module-path mods -d mods/com.greetings src/com.greetings/module-info.java src/com.greetings/com/greetings/Main.java

编译成功,查看mods文件夹,分别对应两个编译完成的结果。
此时执行命令:

$ java --module-path mods -m com.greetings/com.greetings.Main
Greetings world!

到现在为止,com.greetings依赖org.astro的发布例子就如上所示。

对编译结果可以使用jar命令打包。
创建mlib文件夹:

$ mkdir mlib

打包命令如下:

jar --create --file=mlib/com.greetings.jar --main-class=com.greetings.Main -C mods/com.greetings .

一定注意,最后还有一个“.”符号,千万不要漏了。不然会提示错误。
几个参数说明:

  • --create 表示创建
  • -C 表示指定读取目录

下面可以直接使用命令执行:

$ java -p mlib -m com.greetings
Greetings world!

至此,基于Jissaw特性的模块发布和引用基本功能就这样。当然还有一些更加复杂的参数和其他命令,比如jlink等等,以后学习到了,再发布上来一起讨论。

原文链接地址。

这是我博客新地址,欢迎大家一起交流 https://lxzchen.github.io

你可能感兴趣的:(聊聊Java9的Jigsaw特性)