当前位置: 首页 > article >正文

JDK14特性Java 原生代码编译工具jpackage

文章目录

  • JEP 358: Java 原生代码编译器(JEP 358)详解
    • JEP 358 的主要目标
    • JEP 358 的核心特性
  • 使用 `jpackage` 工具
  • 定制更多选项

JEP 358: Java 原生代码编译器(JEP 358)详解

  • JEP 358 是 Java 14 引入的一项新特性,旨在提供一个工具来将 Java 应用程序打包为平台特定的原生可执行文件(native executables)。这个工具叫做 jpackage,它允许开发者将 Java 应用程序打包成操作系统特定的安装包或可执行文件,从而简化部署和分发过程。

  • 在 Java 14 之前,开发者通常需要在目标机器上安装 JDK 或 JRE 才能运行 Java 应用程序,但 JEP 358 提供了一种方式,使得 Java 应用程序可以作为独立的可执行文件运行,无需外部的 Java 运行时环境。

JEP 358 的主要目标

  1. 简化应用程序部署:通过 jpackage,Java 应用程序可以打包成平台特定的安装包,如 .exe(Windows),.dmg(macOS),.deb.rpm(Linux)。
  2. 无外部 JRE 依赖:应用程序可以不依赖于系统上的 JRE,而是将一个合适的 JRE 随应用程序一起打包,从而避免用户安装 JDK 或 JRE 的麻烦。
  3. 支持多平台jpackage 工具支持多平台打包(Windows、macOS 和 Linux)。

JEP 358 的核心特性

  1. 支持自定义 JDK 运行时:打包时可以将 JDK 运行时环境一起打包到应用程序中。
  2. 创建平台特定的安装包:生成的平台包支持 Windows 的 .exe 文件、macOS 的 .dmg 文件和 Linux 的 .deb/.rpm 文件。
  3. 支持应用程序图标:你可以指定图标和其他资源,使最终的打包程序看起来更加专业。

使用 jpackage 工具

  1. 确保安装的是 JDK 14 或更高版本
    java -version
    
  2. 准备一个简单的 Java 程序
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
        }
    }
    
  3. 编译并打包 JAR 文件
    javac HelloWorld.java
    
  4. 进入HelloWorld.class所在的文件夹,使用 jar 工具将编译后的 .class 文件打包成 JAR 文件
    jar --create --file HelloWorldApp.jar --main-class HelloWorld HelloWorld.class
    
  5. 使用 jpackage 创建原生应用程序
    jpackage --input ./ --name HelloWorldApp --main-jar HelloWorldApp.jar --main-class HelloWorld --type dmg
    
    --input ./:指定包含 JAR 文件的目录(当前目录)
    --name HelloWorldApp:指定应用程序的名称
    --main-jar HelloWorldApp.jar:指定包含主类的 JAR 文件
    --main-class HelloWorld:指定主类
    --type dmg:指定打包类型为 macOS 的 .dmg 安装包
    • Windows: 创建一个 .exe 可执行文件。
    • macOS: 创建一个 .dmg 安装包。
    • Linux: 创建 .deb.rpm 包。

在这里插入图片描述

定制更多选项

  1. 指定应用图标
    jpackage --input target/classes --name HelloWorldApp --main-class HelloWorld --type exe --icon myapp.ico
    
  2. 定制 JDK 运行时环境
    jpackage 还允许你打包一个最小的 JDK 运行时环境,以确保目标机器上没有安装 JDK 时仍能运行应用程序。
    jpackage --input target/classes --name HelloWorldApp --main-class HelloWorld --type exe --runtime-image path/to/custom/jdk
    

http://www.kler.cn/a/517073.html

相关文章:

  • 023:到底什么是感受野?
  • C语言文件操作
  • 2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs
  • 什么是COLLATE排序规则?
  • 《CPython Internals》阅读笔记:p336-p352
  • 终极的复杂,是简单
  • SpringBoot自定义实现触发器模型的starter
  • 【期末速成】软件设计模式与体系结构
  • 把网站程序数据上传到服务器的方法和注意事项
  • 针对业务系统的开发,如何做需求分析和设计?
  • 【数据结构】_基于顺序表实现通讯录
  • 在Docker 容器中安装 Oracle 19c
  • 编译Android平台使用的FFmpeg库
  • 【玩转全栈】----YOLO8训练自己的模型并应用
  • 6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
  • (详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源
  • Redis线上阻塞要如何排查
  • Java面向对象专题
  • 【leetcode100】二叉搜索树中第k小的元素
  • python远程获取数据库中的相关数据并存储至json文件
  • MySQL中的关联查询:方式、区别及示例
  • Python 爬虫——爬取Web页面图片
  • 03垃圾回收篇(D3_垃圾收集器的选择及相关参数)
  • 2K高刷电竞显示器怎么选?
  • 记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
  • Django 静态文件配置实战指南