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

jpack似乎打包了不该打包的东西

翟泰
2023-03-14

我正在尝试为一个相对较小的程序使用jpack创建一个本机安装程序。创建的应用程序映像的大小约为120 MB。这很奇怪,因为我以前使用过jlink,运行时映像过去只有约40 MB。经过一些挖掘,我在我的应用程序映像中发现了runtime/lib/模块,一个90 MB大小的文件。由于runtime/Legal列出了很多东西(模块?)我不使用,我认为jpack打包了它不应该打包的东西,但我不确定。

注意:程序不应该是模块化的。我的理解是,这只在制作多部件程序或库时有用。我使用了模块信息。eclipse自动创建的java,用来“欺骗”jlink创建运行时映像。

下面是我用来创建应用程序映像的参数。

--type app-image
--name myapp
--dest target\appimg
--temp target\appimg-work
--input target\jar
--icon .\icon.ico
--main-jar target\jar\myapp.jar
--main-class com.msgprograms.myapp.AppMain

将一些文件复制到应用程序映像后,我使用另一个jpackage运行创建安装程序,这次使用以下参数:

--type msi
--app-version 0.0.1
--copyright "(C) msgprograms"
--description "some app"
--name myapp
--dest target
--temp target\installer-work
--vendor msg-programs
--app-image target\appimg\myapp
// omitted windows-specific args

为什么应用程序映像这么大,我如何让它变小?除了让程序再次模块化,使用jlink创建运行时映像然后将其交给jpack之外,还有别的方法吗?

编辑:
我忘了提到该应用程序不使用JavaFX。但我在jpackage上找到的所有文章都是这样,所以它们的帮助有限。

编辑2:
试图通过做--jlink选项"--add-模块java.desktop"来变得聪明不起作用,因为jlink选项[--add-模块]在--jlink选项中是不允许的

共有2个答案

夹谷辰沛
2023-03-14

请看一下本教程。https://github.com/dlemmermann/JPackageScriptFX它主要也是为JavaFX设计的,但基本原则是通用的,对您很有帮助。它将jlink阶段与jpackage阶段分离,因此可以完全避免模块系统,但仍然能够构建简化的运行时映像。

尚景焕
2023-03-14

JPackage确实会自动使用jlink来构建JRE,而这些模块最终会在该模块文件中。如果您的jar不是模块化的,那么jpack将添加所有内容,除非您设置--add-模块。否则选中module-info.java仅包含运行时的基本要素,而不包含任何测试代码依赖项。我使用过的一些版本的Eclipse非常热衷于将JUNIT测试库添加到module-info.java,这在部署发布目录中是不需要的。Eclipse应该为src测试代码设置单独的构建目录。

但是,独立使用jlink有很多好处,因为在使用jpackage之前,您可以使用JRE测试您的代码库-这可以节省大量时间,而且如果您的JDK依赖关系没有改变之前的JRE已经准备好了。

此外,jlink命令行还支持添加标志以进一步减少JRE大小:

jlink --strip-debug --no-man-pages --no-header-files --compress=1 --add-modules blah,blah  --output myjre
 类似资料:
  • 虽然我们已经了解了网络传输 Git 数据的常用方法(如 HTTP,SSH 等),但还有另外一种不太常见却又十分有用的方式。 Git 可以将它的数据 “打包” 到一个文件中。 这在许多场景中都很有用。 有可能你的网络中断了,但你又希望将你的提交传给你的合作者们。 可能你不在办公网中并且出于安全考虑没有给你接入内网的权限。 可能你的无线、有线网卡坏掉了。 可能你现在没有共享服务器的权限,你又希望通过邮

  • 配置 在开始写扩展之前,你需要在系统上配置如下几个工具: 下载并全局安装 Composer ,为扩展生成自动加载。 配置 Node.js 并全局安装 Gulp ,编译扩展的客户端 JavaScript。 除此之外,你也可以安装 Flarum 的 Vagrant 开发者镜像,它帮你自动装好了所有工具。 生成框架 Flarum 有便利的工具来为你生成扩展的框架,这样你就可以马上开始写代码了。打开终端并

  • 打包 本章描述如何给你的扩展打包。正如 综述 中提到的扩展文件是一个签名的ZIP文件,扩展名是crx。比如 myextension.crx. 注意: 如果你使用 Chrome Developer Dashboard,发布你的扩展,你将无需自己打包。你自己打包一个crx的唯一原因是你需要发布一个非公开版本,比如一个alpha测试版本给测试用户。 当你打包一个扩展到时候。这个扩展获得唯一的一对密钥,其

  • 分发自由软件的标准形式是源代码。无论软件是否以源代码的形式(例如解释性语言Perl、Python和PHP等等)运行,还是必须首先编译(例如C、C++和Java等),这一点是毋庸置疑的。通过编译好的软件,大多数用户可能无需自己编译源代码,而只需安装预先编译的二进制包(见本章后面的the section called “二进制包”)。然而,这些二进制包依然来自主源代码分发包。原因是源代码包明确定义了发

  • 我的数据集是 我想计算prob(Q2=1,给定q4=1),根据我的知识,它应该是1。但是当我在R中使用following命令时 返回0.5 第二个问题是如果我将数据集更改为 当我使用上面的数据并计算上面的概率时,它返回1。当我不改变Q2和Q4时,概率怎么会改变。 我的想法是,在这两种情况下,概率应该是相同的1。 为什么它只是随着其他参数Q1和q3的变化而变化。我认为它应该改变,因为P(q2=1/q

  • 打包 Vue 项目使用以下命令: 执行以上命令,输出结果如下: 执行完成后,会在 Vue 项目下会生成一个 dist 目录,该目录一般包含 index.html 文件及 static 目录,static 目录包含了静态文件 js、css 以及图片目录 images(如果有图片的话)。 如果直接双击打开 index.html,在浏览器中页面可能是空白了,要正常显示则需要修改下 index.html