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

问题描述 投票:0回答:2

我是 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) 在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 目录中。将解码器模块-info.java、com/decoder/Decoder.java添加到解码器目录。

(4) 导航到 test/moduleExamples/readerDecoderExample 目录,运行以下命令

导出JAVA_HOME=test/jdk9.0.4 mkdir 模组 导出 MODULE_PATH=测试/moduleExamples/readerDecoderExample/mods

(5)编译读写器模块

${JAVA_HOME}/bin/javac -d mods --module-source-path src/main/java/ $(find src/main/java -name "*.java")

(6)运行Decoder类

${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/[email protected] --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/[email protected]

(10) 当我尝试使用以下命令构建 JRE 时

${JAVA_HOME}/bin/jlink --module-path ${JAVA_HOME}/jmods;mlibs/[email protected] --add-modules [email protected] --output out

我收到以下错误。

错误:--必须指定输出

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

提前谢谢您!

java java-9 jlink
2个回答
0
投票

我在工作中做demo的时候在gitbash上也遇到了同样的问题。我之前在 Mac 上尝试过,

${JAVA_HOME}/jmods;mlibs/[email protected]
工作正常,只需在转移到 PC 时将
:
更改为
;

错误似乎与 jmod 相关,所以我只是将其删除,并且工作正常 - 不知道如何或为什么,这种方法在 Mac 上不起作用。

以下应该有效:

${JAVA_HOME}/bin/jlink --module-path mlibs/[email protected] --add-modules [email protected] --output out

0
投票

标志 --output 是一个选项,应放置在 --module-path 标志之前。

用法:jlink --module-path --add-modules [,...]

如果有多个模块路径 - ':' 分隔符对我来说是正确的(Ubuntu)。

© www.soinside.com 2019 - 2024. All rights reserved.