首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由javapackager添加的限制模块

由javapackager添加的限制模块
EN

Stack Overflow用户
提问于 2017-10-22 17:18:50
回答 2查看 1.6K关注 0票数 8

我试图通过限制应用程序包含的模块来缩小应用程序的大小。我已经使用jlink在运行时这样做了。但是,当我使用带有逗号分隔的、与运行时使用的小模块集的逗号分隔的javapackager选项运行--add-modules--limit-modules时,它坚持添加所有模块。它似乎不想尊重我给它的选择。我怎样才能得到这个工具来限制它添加到我的应用包中的模块?

代码语言:javascript
复制
"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]

下面是我运行的命令,并替换了一些东西,比如用户名:

代码语言:javascript
复制
/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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 18:45:55

因此,它不尊重我的选择的原因是因为我的应用jar不是Java 9模块。这是个普通的旧罐子。在Java9中,javapackager使用jlink来生成运行时,并且不会试图限制模块的数量,因为它无法确定模块的依赖关系。-Bruntime选项仅适用于Java应用程序。如果希望javapackager不使用jlink,则必须使用JDK 8中的一个。

由于涉及到所有第三方依赖项的复杂性,我无法将我的app jar转换为模块(您可以看到细节在这个问题上)。我不能使用JDK 8,因为我需要一些API添加到Java9中的桌面模块中。

  1. 使用jlink生成一个精简的运行时,只需使用--add-modules选项指定所需的模块。您可以使用jdeps命令来确定应用程序中的所有jars都需要哪些模块。
  2. 像往常一样使用.app生成完整运行时的javapackger
  3. 打开您生成的.app文件(macOS)或Windows,使用一些允许您编辑.exe或.msi安装程序的内容(我不知道如何做到这一点)。
  4. 在macOS上,将<myApp>.app/Contents/PlugIns/Java.runtime/Contents/Home的内容替换为瘦运行时的内容。对Windows安装程序执行类似的操作。
票数 6
EN

Stack Overflow用户

发布于 2017-10-22 17:37:06

使用命令行javapackager,您可以使用部署选项 --limit-modules--add-modules,例如:-

代码语言:javascript
复制
javapackager -deploy 
    --add-modules java.base,java.desktop... 
    --limit-modules java.base,java.desktop,java.naming...
    --module-path your.mods.dir
    -native -outdir OUTPUT_DIR -outfile APPLICATION_NAME 
    -srcdir PACKAGE_SRC_DIR -srcfiles APPLICATION.jar -appclass MAIN_CLASS
    -name "YourApplication" -title "SelfContained"

或者从口头上讲,部署的蚂蚁任务由以下内容组成:

代码语言:javascript
复制
<fx:runtime strip-native-commands="false">
    <fx:add-modules value="java.base"/>
    <fx:add-modules value="java.desktop,java.naming..."/>
    <fx:limit-modules value="java.base"/>
    <fx:limit-modules value="java.desktop,java.naming..."/>
    <fx:module-path value="${java.home}/../images/jmods"/>
    <fx:module-path value="${build.dir/modules"/>
</fx:runtime>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46877002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档