Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDK 9 jlink给出错误:--必须指定输出_Java_Java 9_Jlink - Fatal编程技术网

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

Java JDK 9 jlink给出错误:--必须指定输出,java,java-9,jlink,Java,Java 9,Jlink,我是JDK9新手,尝试使用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

我是JDK9新手,尝试使用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;
    }

我定义了两个名为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) 将reader模块-info.java,org/reader/reader.java添加到reader目录。将解码器模块-info.java、com/decoder/decoder.java添加到解码器目录

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

导出JAVA_HOME=test/jdk9.0.4 mkdir mods 导出模块_PATH=test/moduleExamples/readerdecorexample/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目录,如下所示

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上试过它;姆利布斯/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

确实要添加模块吗reader@1.0
而不仅仅是
阅读器
?版本不仅仅是为了您的信息而需要的。我重新打包了模块,这样我就没有了版本readerDecoderExample/mlibs/decoder.jar readerDecoderExample/mlibs/reader.jar,并重新运行了jlink,如下所示${JAVA_HOME}/bin/jlink——模块路径${JAVA_HOME}/jmods;mlibs--添加模块读取器,解码器--输出我仍然收到相同的错误。关于
${JAVA_HOME}/bin/jlink--模块路径${JAVA_HOME}/jmods:mlibs--添加模块读取器,解码器--输出如何?另外,您使用的是什么操作系统?请相应地验证您的分隔符。哪个操作系统仍然有效?如果是Linux或macOS,则在模块路径中使用冒号,而不是分号。如果您使用分号,那么它将截断您的命令(这是一个shell问题,而不是jlink问题)。我运行了${JAVA_HOME}/bin/jlink-v——模块路径${JAVA_HOME}/jmods:libs——添加模块解码器——输出imageFromLibs,这给了我以下消息:“错误:索引32处的非法字符:/c/GIT/JDK9/test/JDK9.0.4//jmods:libs”。我跳到DOS命令提示符,运行%JAVA_HOME%/bin/jlink-v——模块路径%JAVA_HOME%/jmods;libs——添加模块解码器——从libs输出图像这很有效,感谢您的输入!
${JAVA_HOME}/bin/jlink --module-path mlibs/reader@1.0.jar --add-modules reader@1.0 --output out