关于java:jpackage在Java-16中可以投入生产

6次阅读

共计 1956 个字符,预计需要花费 5 分钟才能阅读完成。

JDK 16 具备打包自蕴含 Java 应用程序的性能。

如果您不停地思考针对不同平台进行编译,我会感觉到。Java 的承诺之一就是 WORA(一次写入,可在任何中央运行)原理,在彻底改变平台独立性的同时,又进行了一步,那就是可能在任何中央进行部署。就集体而言,我认为 WORADA 听起来很棒,但我想在 Docker 之前人们还没有意识到打消“我的机器上的工作”就像运送机器一样简略。

因而,您编写了一个类,构建了一个 jar 文件,而后须要正确的 JVM(或 JDK)和所有正确的依赖项,它们以十分非凡的形式进行组织能力使其失常工作。有哪些机会能够将这些常识残缺地从 Dev 筒仓残缺地转移到 Ops 筒仓?

“运送您的机器”容器反动

容器扭转了所有。只管在过来的几年中,“我至多很难在每个平台上运行,但其余所有甚至都没有做到”,埋怨“我在部署 Java 应用程序上遇到了很大的麻烦”,但 Docker 和容器的衰亡使“至多它是多平台的”论点。忽然之间,多平台反对就没有那么重要了(因为您曾经交付了指标平台),然而有了一个软件包,其中将蕴含整个应用程序,这是一个赢家。

意识 jpackage,本机 Java App 安装程序生成器

在 Docker JEP 311 首次公布仅 4 年后:Java Packager API 和 CLI 才刚刚起步。这个想法是采纳旧的废除的 Javapackager 工具(其指标是“用作 Ant 工作的替代品”,这是 Oracle 官网文档的引文,我不通知你!)清理,记录下来,提供适当的 API,并容许 Java 开发人员创立适当的安装程序。在 Java 16 发行版中,它已被 JEP 343 和 392:打包工具所取代,这是一个洁净的重写,而且很棒。开始了:

$ jpackage create-installer –runtime-installer \

--name  --output outputdir

Boom,您刚刚创立了一个蕴含所有内容的安装程序(.msi/.exe1,.dmg 或.deb/.rpm)(您的应用程序,您的依赖项,整个 JRE 和厨房水槽)。

所有?听起来很多!

的确是!然而,您不用真正打包所有货色。运行以下内容,以仅应用您的应用程序创立可执行文件:

$ jpackage –name myapp –input lib –main-jar main.jar \

--main-class myapp.Main

该软件包将包含该应用程序的启动器,也称为 myapp。要启动该应用程序,启动程序会将从输出目录复制的每个 JAR 文件放在 JVM 的类门路上。

嘿,我的 JRE 去哪了?

然而…然而…咱们不是通过排除 JRE 来毁坏整个指标吗?是的咱们做了。让咱们通过蕴含 JRE(但不是全副)找到一种两头办法。您能够应用该 jlink 命令创立 JRE 的子集,仅包含您真正须要的模块:

$ jlink –add-modules java.base,java.sql –output smalljre

当初,您有了一个自定义(且很小)的 JRE smalljre。让咱们用它来创立一个安装程序,而不是整个野兽:

$ jpackage –name myapp –input lib –main-jar main.jar \

--runtime-image smalljre

不 jpackage 酷吗?它是!它会取代 Docker 吗?并不真地。真的是要替换 Docker 吗?不,那有什么作用?好了,当初咱们有了一个独立的 Java 应用程序,咱们能够在任何中央运行。

将 Java 软件包带到任何中央

太好了,咱们创立了一个很棒的程序包。怎么办?好吧,这取决于此程序包是什么。这里有几个抉择:

这是一个可下载的桌面应用程序。在这种状况下,您须要一个云散发服务。JFrog Platform 提供了一个齐全能够做到这一点的 收费云帐户。您能够将 Java 程序包部署到通用存储库,而后让人们将其下载到他们的设施中。
JFrog Platform 还可用作 Debian 和 rpm 软件包存储库类型,因而您能够本地托管和服务 Debian 和 rpm Java 软件包!
如果您想进一步改善发行体验,则其余 JFrog Platform 订阅级别包含 CDN(内容交付网络)反对,该反对可在世界任何中央提供更好的下载速度。
它是 Docker 映像的一部分。在这种状况下,请获取收费的 JFrog 容器注册表进行自我托管,或者在 JFrog 平台上关上收费的云帐户。在这两种状况下,您都会取得一个收费的 Docker 映像的 Docker 注册表,以及一个用于这些映像的内容的通用存储库,即咱们的 Java 包。接下来,一条简略的 ADD 指令将一个文件– Java 包复制到您的映像中,从而使 Dockerfile 放弃整洁,简略和整洁。

参考:《2020 最新 Java 根底精讲视频教程和学习路线!》
原文链接:https://blog.csdn.net/weixin_…

正文完
 0