当前位置: 首页 > 面试题库 >

Java内置的自包含应用程序

公孙新觉
2023-03-14
问题内容

我看过一些在线演示,其中简要提到了Java 9中的独立应用程序,但是我有一个问题需要解决。

使用新的模块系统,现在只允许包含运行应用程序所需的最少代码量。但是,希望运行该应用程序的系统是否仍然需要JRE,或者该程序的基本模块中可以包含某些内容?

我怀疑是后者,因为下载Java最新版本的页面(此处)仍然显示版本8_151。

TL; DR-使用Java 9,是否可以创建一个自包含的可执行文件,可以在未安装JRE / Java的系统上执行?


问题答案:

是的,这可以通过jlink(JEP
282
)实现,但是您的所有代码 依赖项都必须是模块化JAR(即带有的JAR
module-info.class)。它是这样的:

jlink
    --module-path $JAVA_HOME/jmods:mods
    --add-modules your.app
    --launcher launch-app=your.app
    --output your-app-image

详细地:

  • --module-path列出包含模块的文件夹-这需要包括您要使用的JDK附带的平台模块(在中$JAVA_HOME/jmods)和应用程序模块(在中mods
  • --add-modules 命名您希望运行时映像包含的模块-包括其所有(传递)依赖项
  • --launcher是可选的,但非常方便;它.bat使用给定名称(launch-app)创建一个特定于操作html" target="_blank">系统的启动器(例如Windows上的启动器),以启动指定的模块(your.app在这种情况下,假定为其定义了主类)
  • --output 指定在哪里创建运行时映像


 类似资料:
  • 我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用

  • 按照这里和这里的指示。我使用的是JDK7U9和NetBeans 7.2.1。我所做的是创建相对于我的项目根文件夹的整个路径(C:\users\administrator\desktop\icotest\package\windows\icotest.ico)。我同时尝试了48x48和256x256的大小。下面是我的项目Icotest的树状结构概述: 这就是build.xml的样子:

  • 为了完整起见,我使用Oracle JDK 1.8.0_66 for Mac。

  • 谷歌拒绝了我的应用程序,我在提交应用程序作为生产版本时遇到了这个安全错误: 隐含的内部意图 您的应用程序包含隐式内部意图漏洞。有关详细信息,请参阅此Google帮助中心文章。 我应用了这里列出的所有建议:修复隐式悬而未决的漏洞 但错误依然存在。 我的服务: 清单: 这项服务在很多地方都是通过以下三种方式启动的:(根据谷歌的建议,我添加了PendingEvent.FLAG_IMMUTABLE) 方法

  • 定义 一个应用可以包含其他应用。一个被包含的应用有它自己的应用目录和 .app 文件,但是它是作为另一个应用的监督树的一部分被启动的。 一个应用只能被一个其他的应用所包含。 一个被包含的应用也可以包含其他应用。 一个不被任何其他应用所包含的应用被称之为主应用。 应用控制器在加载一个主应用的时候会自动加载任何被包含的应用,但并不会启动它们。被包含的应用的顶层督程应由进行包含的应用的某个督程来启动。

  • 问题内容: 如问题所述,在Java编程语言中,有多少内存用于引用对象? 请,如果您有可信赖的来源更好。 非常感谢! 问题答案: 语言或JVM规范未指定。但是,通常公认的是,任何明智的实现在32位计算机上都是4字节,而在64位计算机上则是4到8字节(取决于压缩指针设置等)。