Gab*_*beV 8 java java-9 javapackager java-module
我试图通过限制它包含的模块来减少我的应用程序的大小.我已经为我的运行时使用了这个jlink
.然而,当我运行javapackager
使用--add-modules
,并--limit-modules
选择用逗号分隔的相同的小套我用于运行时模块的列表,它坚持将所有模块的反正.它似乎不想尊重我给它的选项.如何获得该工具来限制它添加到我的应用程序包中的模块?
"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]
Run Code Online (Sandbox Code Playgroud)
这是我运行的命令,用户名替换了一些东西:
/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
Run Code Online (Sandbox Code Playgroud)
事实证明,它之所以没有尊重我的选择,是因为我的app jar不是Java 9模块.这是一个普通的旧罐子.在Java 9中,javapackager
用于jlink
生成运行时并且不会尝试限制模块的数量,因为它无法确定模块的依赖性.该-Bruntime
选项仅适用于Java Web Start应用程序.如果您不想javapackager
使用jlink
,则必须使用JDK 8中的那个.
由于所有第三方依赖项的复杂性,我无法将我的app jar变成一个模块(你可以在这个问题中看到详细信息).我不能使用JDK 8,因为我需要在Java 9中的桌面模块中添加一些API.因此,我找到了一种解决方法,使用Java 9在应用程序中获得更轻薄的运行时javapackager
:
jlink
使用该--add-modules
选项仅指定所需的模块,从而生成更轻薄的运行时.您可以使用该jdeps
命令确定应用程序中所有jar所需的模块.javapackger
像往常一样使用完整运行时生成.app .<myApp>.app/Contents/PlugIns/Java.runtime/Contents/Home
较瘦的运行时的内容.为Windows安装程序执行类似操作. 归档时间: |
|
查看次数: |
1033 次 |
最近记录: |