我是 JDK 9 的新手,并尝试使用 jlink 为简单的应用程序生成运行时。
我有以下模块描述符
module reader{
// no "requires" entries implies no dependency on other modules
// other modules can access org.reader package
// all other packages are implicitly unavailable
exports org.reader;
}
和
module decoder {
// depends on reader module
requires reader;
// exposes com.decoder package to modules which require decoder module
// all other packages in decoder module are implicitly unavailable to other modules
exports com.decoder;
}
我定义了几个名为 Reader.java 和 Decoder.java 的简单类,并且能够使用以下步骤编译和运行它们。
(1)下载JDK和JRE 9.0.4并解压到test目录下
(2) 在 test 目录中创建如下目录结构。
/moduleExamples/readerDecoderExample/src/main/java
/moduleExamples/readerDecoderExample/src/main/java/reader
/moduleExamples/readerDecoderExample/src/main/java/decoder
(3) 将 reader module-info.java、org/reader/Reader.java 添加到 reader 目录。将解码器module-info.java、com/decoder/Decoder .java 添加到解码器目录。
(4)导航到test/moduleExamples/readerDecoderExample目录,运行以下命令
导出 JAVA_HOME=test/jdk9.0.4 mkdir mods 导出 MODULE_PATH=test/moduleExamples/readerDecoderExample/mods
(5) 编译阅读器和解码器模块
${JAVA_HOME}/bin/javac -d mods --module-source-path src/main/java/ $(find src/main/java -name "*.java")
(6) 运行解码器类
${JAVA_HOME}/bin/java --module-path mods -m decoder/com.decoder.Decoder input.txt
(7) mkdir mlibs
(8) 使用以下命令将模块打包到 jar 中。
${JAVA_HOME}/bin/jar --create --file mlibs/reader@1.0.jar --module-version=1.0 -C mods/reader .
${JAVA_HOME}/bin/jar --create --file mlibs/decoder.jar --main-class=com.decoder.Decoder -C mods/decoder .
(9)在步骤(8)的最后,我有一个mlibs dir,如下图
readerDecoderExample/mlibs/decoder.jar
readerDecoderExample/mlibs/reader@1.0.jar
(10) 当我尝试使用以下命令构建 JRE 时
${JAVA_HOME}/bin/jlink --module-path ${JAVA_HOME}/jmods;mlibs/reader@1.0.jar --add-modules reader@1.0 --output out
我收到以下错误。
错误:必须指定 --output
有人可以告诉我我做错了什么吗?
先感谢您!