Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 jlink:应用程序jar不是在/bin文件夹中创建的_Java_Jlink_Java 12 - Fatal编程技术网

Java jlink:应用程序jar不是在/bin文件夹中创建的

Java jlink:应用程序jar不是在/bin文件夹中创建的,java,jlink,java-12,Java,Jlink,Java 12,我正在执行下面的命令来创建一个图像 jlink --module-path jars/:$JAVA_HOME/jmods --add-modules app.main,app.interfaces.impl,app.interfaces.otherimpl --output image “app.main”模块包含主类 “app.interfaces.impl”和“app.interfaces.otherimpl”是实现“app.interfaces”模块中接口的模块 当我使用jlink命令创

我正在执行下面的命令来创建一个图像

jlink --module-path jars/:$JAVA_HOME/jmods --add-modules app.main,app.interfaces.impl,app.interfaces.otherimpl --output image
“app.main”模块包含主类

“app.interfaces.impl”和“app.interfaces.otherimpl”是实现“app.interfaces”模块中接口的模块

当我使用jlink命令创建映像时,它会在bin文件夹中创建java和keytool命令,但不会复制任何模块

$tree
.
├── image
│   ├── bin
│   │   ├── java
│   │   └── keytool
但是当我执行'java--list modules'时,它会列出所有模块

$./image/bin/java --list-modules
app.interfaces
app.interfaces.impl
app.interfaces.otherimpl
app.main
java.base@12.0.1
$
如何从app.main模块运行主类?模块复制到了哪里

如何从app.main模块运行主类

除了执行主类之外,还可以使用命令行:

/image/bin/java -m app.main/app.main.MainClass
或者使用
--launcher
选项在bin目录中创建启动脚本,例如:

--launcher app=app.main/app.main.MainClass

您可能已经在
/JAVA_HOME/jmods
jars/
文件夹本身中创建了模块
app.main
app.interfaces.impl
app.interfaces.otherimpl
。除了尝试执行
java--module path jars/:$java_HOME/jmods-m app.main/app.main.MainClass
Hi-Naman,感谢您的回答,我可以通过您提供的命令运行jar文件。但实际上我想创建一个图像,我该怎么做呢?您似乎在寻找
--launcher
选项。除此之外,你已经有了一个形象,不是吗?你认为,它的目的是什么?“您可以使用jlink工具将一组模块及其依赖项组装并优化为自定义运行时映像”如果您要复制未优化的zip文件,可以使用操作系统的copy命令。当
/image/bin/java--list modules
显示您的模块时,您可以使用
/image/bin/java-m app.main
运行该模块,前提是该模块已声明mainclass或
/image/bin/java-m app.main/actual.mainclass
否则。@Holger从问题
$/image/bin/java--list modules开始,我假设这里使用的
java
与下面的相同。正确,模块路径也不应该是必需的,因为
--list modules
已经证明所需模块在图像中的存在是合理的。@使用-m选项我可以运行应用程序。我认为当我创建一个映像时,它会复制所有指定的和相关的模块。由于“/image/bin/java--list modules”列出了映像中所有可用的模块,因此我可以确认这些模块是映像的一部分。这些模块现在是java launcher的一部分还是复制到映像中的某个地方?@HariKrishna它们现在是您创建的映像的一部分。您可以列出
/image
文件夹中的所有文件,并验证其大小以及与JDK模块的比较。@HariKrishna除了当前图像之外,
--launcher
和您可以看到的完整文件列表都很好。