当前位置: 首页 > 知识库问答 >
问题:

只有一个应用程序的JPackage?

吕嘉赐
2023-03-14

我有一个java应用程序,它在运行时会产生另一个JVM。然而,我想使用jpack打包我的应用程序,它运行得很好。但是在运行时,当我的应用程序尝试使用调用下一个JVM时

File javaHome = new File(System.getProperty("java.home"));
File java = new File(javaHome, "bin/java"); // may need a tweak on Windows
new ProcessBuilder().start(java.getAbsolutePath(), "-jar", ...);

我必须知道,应用程序是使用定制的JVM启动的,并且没有像“java”这样的命令。所以我得到的错误是这个java。无法执行getAbsolutePath()。

如果没有java可执行文件,我的应用程序如何在单独的进程中运行另一个jar?我可以重用与我的应用程序捆绑的JVM吗?还是我还必须提供另一个JVM?

共有1个答案

唐珂
2023-03-14

默认情况下,jpack在调用jlink创建运行时映像时会传递以下标志:

--strip-native-commands --strip-debug --no-man-pages --no-header-files

从运行时映像中删除java启动器的就是这个--stri-native-Command标志。

调用< code>jpackage时,可以使用< code> - jlink-options标志来覆盖默认命令,并删除< code >-strip-native-commands 标志:

--jlink-options "--strip-debug --no-man-pages --no-header-files"

这应该会导致java命令(以及其他命令)出现在创建的运行时映像中。

如果希望对jpackage使用的自定义JVM/运行时映像有更多的控制,还可以手动运行< code>jlink来创建运行时映像,然后使用< code> - runtime-image标志将该映像传递给< code>jpackage。

 类似资料:
  • 问题内容: 我读到每个应用程序都在自己的JVM中运行。为什么会这样呢?他们为什么不让一个JVM运行2个或更多应用程序? 我说的是通过公共静态void main(String [])方法启动的应用程序…) 问题答案: (我假设您正在谈论通过方法启动的应用程序…) 理论上,您可以在JVM中运行多个应用程序。实际上,它们可以以各种方式相互干扰。例如: JVM具有一组System.in/out/err,一

  • 我试图在Android中创建一个应用程序,仅由1个广播接收器(而不是其他)组成。 广播接收器应该简单地捕捉广播(例如收到的短信,记录信息并完成)。然而,我注意到广播没有被接收器捕捉到,除非我指出我有主活动,如下Androidanifest.xml将显示: 我甚至不需要在应用程序中有一个活动类。此外,如果我在意图过滤器中删除android.intent.category.LAUNCHER或andro

  • 问题内容: 我确信你们中有人注意到,如果您有Acrobat Reader(或其他PDF阅读器),并在Firefox中打开一个PDF,您会看到它嵌入在您的标签中。有什么方法可以将应用程序嵌入JFrame中? 问题答案: 这是一个相当棘手的问题。通常,诸如Adobe Reader之类的本机应用程序不提供可以嵌入到swing应用程序中的组件。但是在Windows中,有COM / OLE方法可以将应用程序

  • 根据DynamoDB文件:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html “在DynamoDB应用程序中,您应该维护尽可能少的表。大多数设计良好的应用程序只需要一个表。” 但是根据我的经验,由于分区键设计,你总是不得不做相反的事情。 让我们考虑下一个情况。我们

  • 04-24 23:24:29.782 8144-8589/com.webdesigners.stockmarketW/System.err:android.view.ViewRootImpl$CalledFromWrongThreadExctive:只有创建视图层次结构的原始线程才能触摸其视图。04-24 23:24:29.783 8144-8589/com.webdesigners.stockm

  • 问题内容: 有什么方法可以配置多个工作进程和/或Web进程以在单个Heroku应用程序容器中运行?还是必须将其分解为多个Heroku应用程序? 例如: 问题答案: 所有进程必须具有唯一的名称。 此外,名称 和 无关紧要,没有特殊含义。 唯一带有重要名称的进程是该进程,如Heroku文档中所述: Web进程类型是特殊的,因为它是唯一将从Heroku路由器接收HTTP流量的进程类型。其他过程类型可以任