- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图通过限制它包含的模块来减小我的应用程序的大小。我已经使用 jlink
为我的运行时执行了此操作。但是,当我使用 --add-modules
和 --limit-modules
选项运行 javapackager
时,它们的逗号分隔列表相同我在运行时使用的一小部分模块,无论如何它都坚持添加所有模块。它似乎不想尊重我给它的选择。我怎样才能获得该工具来限制它添加到我的应用程序包中的模块?
"Adding modules: [java.base, java.desktop, java.naming, java.sql, java.xml, java.logging,
java.management, java.scripting, java.compiler, java.rmi, java.activation, jdk.charsets, jdk.xml.dom,
java.datatransfer, jdk.httpserver, javafx.base, java.security.sasl, jdk.zipfs, jdk.crypto.ec,
jdk.management.agent, java.sql.rowset, javafx.swing, jdk.jsobject, jdk.sctp, java.smartcardio,
jdk.unsupported, jdk.scripting.nashorn, java.security.jgss, javafx.graphics, javafx.fxml, jdk.dynalink,
javafx.media, jdk.accessibility, jdk.security.jgss, javafx.web, java.xml.crypto, jdk.jfr, jdk.packager.services, jdk.net, javafx.controls,
java.prefs, jdk.naming.rmi, jdk.jdwp.agent, java.instrument, jdk.management,
jdk.security.auth, java.management.rmi, jdk.naming.dns, jdk.localedata] to runtime image."
outputDir = ...
modulePath = [/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/jmods]
addModules = [java.base, java.desktop, java.naming, java.sql, java.xml, java.logging, java.management, java.scripting, java.compiler, java.rmi, java.activation, jdk.charsets,
jdk.xml.dom, java.datatransfer, jdk.httpserver, javafx.base, java.security.sasl, jdk.zipfs, jdk.crypto.ec, jdk.management.agent, java.sql.rowset, javafx.swing, jdk.jsobject,
jdk.sctp, java.smartcardio, jdk.unsupported, jdk.scripting.nashorn, java.security.jgss, javafx.graphics, javafx.fxml, jdk.dynalink, javafx.media, jdk.accessibility, jdk.security.jgss, javafx.web, java.xml.crypto, jdk.jfr,
jdk.packager.services, jdk.net, javafx.controls, java.prefs, jdk.naming.rmi, jdk.jdwp.agent, java.instrument, jdk.management, jdk.security.auth, java.management.rmi, jdk.naming.dns, jdk.localedata]
limitModules = [java.base, java.desktop, java.naming, java.sql, java.xml, java.logging, java.management, java.scripting, java.compiler, java.rmi, java.activation]
这是我运行的命令,替换了用户名等内容:
/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/javapackager -deploy -native image \
-name Commander -title Commander -vendor "username" \
-appclass com.username.commander.ui.AppWindow \
-srcdir /Users/username/Dropbox/coding/commander/Commander-java/packageJars \
-outdir /Users/username/Dropbox/coding/commander/Commander-java/target \
-outfile Commander \
-Bruntime=target/jre-9.0.1 -Bicon=src/main/resources/icons/commander.icns \
-BappVersion=1.0 \
-Bmac.CFBundleIdentifier=com.username.Commander \
-BmainJar=commander-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
--add-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
--limit-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
-nosign -v
最佳答案
事实证明,它不遵守我的选择的原因是因为我的应用程序 jar 不是 Java 9 模块。这是一个普通的旧 jar 。在 Java 9 中,javapackager
使用 jlink
生成运行时并且不会尝试限制模块的数量,因为它无法确定模块依赖关系。 -Bruntime
选项仅适用于 Java Web Start 应用程序。如果你想要javapackager
不使用 jlink
,你必须使用 JDK 8 中的那个。
由于涉及所有第 3 方依赖项的复杂性,我无法将我的应用程序 jar 转换为模块(您可以查看详细信息 in this question)。而且我不能使用 JDK 8,因为我需要将一些 API 添加到 Java 9 中的桌面模块。因此,我找到了一种解决方法,可以使用 Java 9 javapackager
在应用程序中获得更精简的运行时。 :
jlink
生成更精简的运行时通过使用 --add-modules
仅指定您需要的模块选项。您可以使用 jdeps
命令来确定您的应用程序中的所有 jar 需要哪些模块。javapackger
生成具有完整运行时的 .app和往常一样。<myApp>.app/Contents/PlugIns/Java.runtime/Contents/Home
的内容与那些更 slim 的运行时。对 Windows 安装程序执行类似的操作。关于java - 限制javapackager添加的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46877002/
javapackager的说明就在 Java SE 部署指南中的示例 2-1/Self-Contained Application Packaging 的上方声明 -deploy 命令中需要一个 ja
我注意到,在不关闭 IDE/命令行的情况下,我无法使用 javapackager 部署 JavaFX 应用程序两次。我想在 Windows 10 计算机上创建应用程序的 native 镜像。 第二次部
我的用例如下。我需要能够从 python 代码中调用 java 方法 来自 py Spark,这似乎很容易 我像这样启动 py Spark ./pyspark --driver-class-path/
我正在使用 javapackager 创建 windows 安装程序,但不知道将许可证文件放在哪里。说明是: licenseFile=路径捆绑商提供或记录的最终用户许可协议(protocol) (EU
我能做到 native package / self-contained app但我不知道如何指定附加信息,例如 vendor name, version number等 我在哪里可以找到这些列表 p
javapackager 和 javafxpackager 似乎无法在我的命令行上识别。即使我安装了最新的 1.8 SDK,它们也不会出现在终端中。 (即使 'echo $JAVA_HOME' 似乎也
我正在使用 javapackager 捆绑一个应用程序,其中主 jar 是一个带有 module-info.class 的模块,但它依赖于许多其他普通的旧 jar,所以我称它们为module-info
像 dataframe.show() 和 sQLContext.read.json 这样的操作工作正常,但大多数函数给出“JavaPackage object is not callable erro
我正在使用 jupyter 实验室运行 spark-nlp 文本分析。目前我只是在运行示例代码: import sparknlp from pyspark.sql import SparkSessio
我正在使用 Netbeans 11,并且创建了一个无法构建/运行的准系统测试 Maven Java 13 项目。 我以前没有使用过 Maven。 在摆弄一些基本依赖项之后,我最终遇到了一个错误,表明在
我在尝试使用 spark streaming,python 运行字数统计示例时遇到错误。 不确定如何进行。下面是我正在运行的命令和错误。 /opt/spark/bin/spark-submit -
我正在使用 javapackager 创建一个 exe 安装程序,并使用命令行捆绑了 jre。 有谁知道如何使用命令行添加图标和自定义安装程序。 这些是我使用的命令: javapackager -de
在 Mac OS X 10.12 下使用 javapackager,我可以生成一个 .pkg 文件。此包在打开时包含一个通用的灰色图标,如下图所示: 如何将通用图标更改为我自己选择的图标?我目前正在使
当我编写 spark sql API hiveContext.sql() from pyspark import SparkConf,SparkContext from pyspark.sql imp
环境: Win10、Oracle JDK 9、Eclipse、jlink、javapackager 上下文:我正在尝试使用 javapackager 生成可执行文件 拥有使用 jlink 制作的 ja
在 macOS 上,命令行选项 -Bmac.CFBundleVersion= documentation 中指定甲骨文 javapackager实用程序不起作用。 我正在使用以下命令来创建磁盘镜像 A
我使用 javapackager 工具从 .jar 文件构建了 .pkg。它运行良好,JRE 以及我的 .jar 都已安装,并且程序正常启动。该程序安装在Application文件夹中(当然是在Mac
我为 macOS 编写了一个基于 Java 的应用程序,该应用程序是使用 Java 8 中的 Oracle 的 javapackager 创建的。它完美运行了几个月,直到发生了一些变化,可能是由于最近
我使用 JDK 13 .但是它没有javapackager (javafxpackager)。我应该从哪里得到它? 对于 JDK 8 javapackager 位于 jdk1.8.0_131\bin
当我使用javapacker command时,当它将库复制到应用程序文件夹时,我收到 NoSuchFileException 。我正在运行以下命令: javapackager -deploy -no
我是一名优秀的程序员,十分优秀!