JDK 9 jlink 给出错误:必须指定输出



我是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 解压到测试目录

(2( 在测试目录内创建如下目录结构。

/moduleExamples/readerDecoderExample/src/main/java
/moduleExamples/readerDecoderExample/src/main/java/reader
/moduleExamples/readerDecoderExample/src/main/java/decoder

(3( 将阅读器模块信息.java、组织/读者/读者.java添加到阅读器目录。将解码器模块-info.java、com/decoder/解码器.java添加到解码器目录。

(4( 导航到测试/模块示例/阅读器解码器示例目录,运行以下命令

导出JAVA_HOME=测试/JDK9.0.4 MKDIR 模组 导出MODULE_PATH=测试/模块示例/阅读器解码器示例/模组

(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目录

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

我收到以下错误。

错误:必须指定输出

有人可以告诉我我做错了什么吗?

提前谢谢你!

我在工作中做演示时在 gitbash 上遇到了同样的问题。我以前在Mac上尝试过,${JAVA_HOME}/jmods;mlibs/reader@1.0.jar工作正常,只是在移动到PC时将:更改为;

错误似乎在 jmods 周围,所以我只是删除了它并且工作正常 - 不确定如何或为什么,这种方法在 Mac 上不起作用。

以下方法应该有效:

${JAVA_HOME}/bin/jlink --module-path mlibs/reader@1.0.jar --add-modules reader@1.0 --output out

最新更新