Emi*_* L. 8 java release java-platform-module-system
我有一个公开可用的 Java 8 桌面应用程序,其中包含 MSI 安装程序,我想将其更新到 Java 17。
目前的用户体验是这样的:
application.exe这是一个基本上运行的垫片java jar application.jar。我很难理解的是用户应该在 Java 9+ 世界中安装什么。例如,如果我将用户发送到: https: //www.oracle.com/java/technologies/downloads/,他们会收到下载 Java 开发工具包的欢迎,这对用户来说安装起来是一件令人困惑的事情(“这是对的吗?我不想开发东西??”)。
此外,当你登陆http://java.com时,它会说“如果你被要求下载 java,很可能就是这个”,这意味着如果你发布应用程序,你应该使用 Java 8(并且忘记 JavaFX 灾难)是 OpenJDK 11 之前的版本,并且只需使用 Orcale Java)...
我的印象是,在 Java 9 之后,Jigsaw 的承诺是构建一个包含本机运行时和 jar 的包,所有这些都整齐地捆绑在一起,以便最终用户必须安装 JVM 的日子结束了。然而在网上搜索,我发现 Gradle 或 IntelliJ(或 Eclipse)不支持这一点,所以这看起来有点像一个死的白日梦?
如果我想发布 Java 17 应用程序,用户是否需要安装 JDK?如果没有,我该如何打包和运送我的申请?
rzw*_*oot 10
甲骨文的观点:
C:\Program Files\JavaSoft过时了。你不需要这样做,JVM 仅适用于该应用程序,该应用程序知道在哪里可以找到它,而系统上的其他任何东西都不知道。每个基于 Java 的应用程序都有自己的 JVM 副本(无论是否经过 Tree Shaking),仅供其使用。jusched.exe任何其他工具来确保其保持最新。一个简单的替代方法是,您只需将拥有可以运行应用程序的 java 运行时的责任转移到用户的肩上即可。告诉他们去下载JDK(因为 JDK 也可以运行 Java 应用程序,实际上比 JRE 更好),告诉他们确保它位于$PATH或在已知位置/告诉你在哪里可以找到它/设置JAVA_HOME,他们有责任保持最新状态。
其他厂商的观点:
jusched.exe或其他更新机制,以及这些 JRE 如何(甚至是否)以您的应用程序/安装程序可以找出它们所在位置的方式注册它们的存在。你必须调查一下。无需真正对 JVM 进行 Treeshake,您也可以仅随应用程序提供完整的 JDK。例如,如果您的安装程序最终执行以下操作:
C:\Program Files\EmilysAwesomeGameROOT\jdk.ROOT\lib.ROOT\emilygame.jar.BAT运行的文件%~dp0\jdk\home\bin\java -jar %~dp0\emilygame.jar,该 jar 有一个 MANIFEST ,Class-Path其中包含一个条目,例如lib\javafx.jar lib\someotherdep.jar, then.. 这会工作得很好,并且用执行相同操作的 exe 替换该 bat 文件也可以正常工作(并且“将您自己的 JVM 发布在a subdir' 是像 launch4j 和类似工具已经支持很长时间的模型)。不进行 treeshaking 的缺点是 JDK 相当大,并且包含各种您不会使用的东西。但是,这只是节省磁盘空间的问题,非 treeshaken JDK 的运行速度不会变慢,那些未使用的部分最终将永远不会被加载。
一个非常常见的“部署模型”是,您提供一个带有 windows-x86 的 exe 的 msi,并告诉其他人自行安装 JDK,并为其他人(linux 用户、mac 用户、windows-aarch64 , ETC)。
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |