java - 使用 Java 9 及更高版本(本例中为 JDK11)部署 JAR(JLink 混淆?)

标签 java eclipse

我是一名Java老手,但我已经使用JDK8很长时间了。我决定最终要升级,所以我一直在使用Java11。我一直很喜欢这些新功能,但我已经意识到我需要部署我的软件。

过去,我会从 Eclipse 导出可运行的 JAR,并将其与适当的 JRE 捆绑在一起。然后,我将使用两者来从特定于操作系统的程序运行软件(例如,启动带有给定 JAR 的捆绑 JRE 的 EXE 文件)。当然,现在这实际上并不是一个选择,因为 JRE 已经成为过去。据说新系统的重量要轻得多,而且简单,唯一的问题是我不知道如何实际使用它。

我一直在阅读有关如何使用 JDK9 及更高版本部署程序的信息,并且看到人们提到了 JLink 并将文档链接到它,但我似乎找不到关于如何简单地导出可运行 JAR 的直接答案。问题是 - 我并不真正需要所有模块支持,也不想配置它。有没有一个工具可以简单地导出我可以运行的东西?现在是怎么做到的?

抱歉,如果这是一个愚蠢的问题,我只是对这一切是如何运作的感到非常困惑,并且无法在网上找到任何以清晰简洁的方式阐述它的内容。有很多关于 JLink 及其用途的文档,但我还没有真正找到任何解释其根本目的的内容。

TL;DR;如何使用 Eclipse(最新版本)导出运行在 JDK9 及以上版本的 Java 程序?

感谢您的宝贵时间!

最佳答案

我花了几个月的时间试图弄清楚如何使用 Java 9+ 创建单个可点击的可执行文件。我现在的结论是,这是不可能的。无论您自己直接使用 jlink,还是通过 Maven 或 Gradle 间接使用 jlink,结果都是 jlink 生成一个完整的目录结构,您可以将其“分发给您的用户”(不知何故,我猜很神奇,因为 Java 9+ 中没有任何内容告诉您关于你应该如何做的任何事情)。然后,一旦您的用户(以某种方式)在其计算机上拥有此目录,他们就被迫调用runtime-image-directory/bin/your-program-name。就好像您的用户是一名程序员,他很高兴必须安装目录结构,并向下钻取以调用特定的文件名,该文件名埋在包含许多其他文件的目录中,而不是曾经能够只需双击 .jar 文件即可运行它。这让我真的想知道是谁设计了所有这些关于“用户体验”的想法。事实上,从 Java 9+ 开始,似乎没有办法简单地将一个文件(例如 .jar)交付给用户,再加上构建这个“运行时镜像”非常复杂,这意味着开发人员将会成群结队地放弃 Java。在我看来,甲骨文的那些天才根本就没有想清楚这一点。他们让开发人员构建和分发的过程变得繁琐,用户调用起来也变得繁重,从而为 Java 敲响了丧钟。我不明白如何允许这种情况继续存在而不导致 Java 最终消亡。如果我在这里遗漏了一些东西,请有人纠正我,但我已经花了几个月的时间试图找出如何在 Java 9+ 中使用模块创建可运行的 jar,但似乎没有办法做到这一点。

关于java - 使用 Java 9 及更高版本(本例中为 JDK11)部署 JAR(JLink 混淆?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068849/

相关文章:

java - Grails war 命令 : what happens behind the scene

java - 提高 Cassandra 和 Java 集合的性能

java - 如何将 XML 字符串转换为 XML 文件?

java - 使用 spark JAVA API takeOrdered 方法出错

c - 乌类图 : Permissions for C program built in Eclispse

java - 有没有办法在 Eclipse 中创建一个快捷方式,将光标跳转到当前行的第 n 列?

java - Spring Hibernate MySQL - 没有连接?

java - 如何设置 Apache Tomcat 8 以在 HTTPS 上运行 servlet 应用程序

java - Android 将文件夹从 Assets 复制到内部设备应用程序数据文件夹

java - "Could not find mopub-android-sdk.apk!"