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
和您可以看到的完整文件列表都很好。