java 模块

module-info.java一般包含以下信息:

模块名称

该模块依赖的其他模块

该模块提供了其他模块

四种模块类型:

命名的模块(也称为应用程序模块)包含上述module-info.java

平台模块(类似于前者,但这些都是随JDK一起发货)

自动模块是在模块路径上提供的那些旧JAR

未命名的模块是标准类路径上列出的所有内容

对Maven用户的影响

为了能够使用JDK 9的模块系统maven-compiler-plugin版本3.6.1或更高版本

1
2
3
4
5
6
7
8
9
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.6.1</version>
  <configuration>
    <showWarnings>true</showWarnings>
    <showDeprecation>true</showDeprecation>
  </configuration>
</plugin>

工具链插件

$HOME/.m2/toolchains.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<toolchains>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>9</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <!-- Change path to JDK9 -->
      <jdkHome>/opt/oracle/jdk-9</jdkHome>
    </configuration>
  </toolchain>
  <toolchain>
    <type>jdk</type>
    <provides>
      <version>1.8</version>
      <vendor>oracle</vendor>
    </provides>
    <configuration>
      <jdkHome>/opt/oracle/jdk-1.8.0.65</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

pom.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-toolchains-plugin</artifactId>
  <version>1.1</version>
  <configuration>
    <toolchains>
    <jdk>
        <version>9</version>
        <vendor>oracle</vendor>
    </jdk>
    </toolchains>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>toolchain</goal>
    </goals>
    </execution>
  </executions>
</plugin>

启用Java 9语言支持

1
2
3
4
5
6
<properties>
  <maven.compiler.release>9</maven.compiler.release>
  <maven.compiler.source>1.9</maven.compiler.source>
  <maven.compiler.target>1.9</maven.compiler.target>
  ...
</properties>

属性 maven.compiler.release直接映射到该-release标志javac,而另外两个属性只对IntelliJ有必要 ,用来了解源码兼容性。

一个模块示例

https://blog.csdn.net/rickiyeat/article/details/78068316

模块文件 module-info.java

放在和模块名相同的目录下

如果模块名称是 com.wiloon.java9x, module-info.java 应该放在:src/com.wiloon.java9x/module-info.java

module-info.java

1
module com.wiloon.java9x { }

添加代码

1
vim src/com.wiloon.java9x/com/wiloon/java9x/Java9Tester.java
1
2
3
4
5
6
7
package com.wiloon.java9x;

public class Java9Tester {
        public static void main(String[] args){
        System.out.println("hello world");
        }
}

编译模块

1
2
3
mkdir -p mods/com.wiloon.java9x
avac -d mods/com.wiloon.java9x src/com.wiloon.java9x/module-info.java src/com.wiloon.java9x/com/wiloon/java9x/Java9Tester.java

运行

1
java --module-path mods -m com.wiloon.java9x/com.wiloon.java9x.Java9Tester