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

macOS下Java应用的打包和安装程序制作

文章目录

    • macOS应用程序结构
    • Java应用打包
      • JavaAppLauncher
      • jpackage
    • 其它相关JDK命令
    • 附录
      • JavaAppLauncher源码
    • 链接

macOS应用程序结构

macOS通常以dmg或pkg作为软件发行包,安装到/Applications下后,结构比较统一。
info.plist里的CFBundleExecutable字段可以指定入口,如果不指定,则MacOS下必须存在同名可执行文件。即abc.app下必须存在abc.app/MacOS/abc文件。

极简结构如下:
在这里插入图片描述

Java应用打包

工具有几个:JDK自带的javapackager,之前的还有JavaAppLauncher等。最新的JDK提供jpackager打包工具。

JavaAppLauncher

先看一个打包后的结构:
在这里插入图片描述
注意,这个JavaAppLauncher来自于JDK(src/macosx/bundle/JavaAppLauncher/src/JavaAppLauncher.m)。所以上面包把JDK也一起打进去了。其它第三方工具如jar2app也是利用了这个JavaAppLauncher程序。

使用jar2app:

python ./jar2app.py -r /opt/jdk1.7.0_45.jdk --main-class com.icool.ui.MainWindow javaui.jar

jpackage

JDK模块化后,对打包是有帮助的。可以只打包部分JRE组件:

## 先创建一个smalljre
jlink --add-modules java.base,java.desktop,java.sql --output smalljre
## 再创建安装包
jpackage --name myapp -t app-image --input . --main-jar javaui.jar --main-class com.icool.ui.MainWindow --runtime-image smalljre

打包完后的结构如下:
在这里插入图片描述
其中myapp是一个可执行文件。

其它相关JDK命令

查看class版本:javap -verbose 文件名.class

查看modules: java --list-modules

附录

JavaAppLauncher源码

主要就是定位到JRE,然后启动JVM。

#import "JavaAppLauncher.h"#import <dlfcn.h>#import "jni.h"#define kLaunchFailure "JavaAppLauncherFailure"typedef jint (JNICALL *CreateJavaVM_t)(JavaVM **pvm, void **env, void *args);
typedef void (JNICALL *SetPreferredJVM_t)(const char *prefJVM);@impl
http://www.lryc.cn/news/323424.html

相关文章:

  • OpenAI GPT商店面临质量与合规问题;黄仁勋预测:十年内AI将实时生成游戏画面
  • 前端根据pdf连接点击下载pdf而不是直接打开
  • pytorch中的gather函数的定义和作用是什么?
  • [ABC206E] Divide Both 解题记录
  • 常见的服务器技术和服务器技术的重要性
  • MATLAB中的数学建模:基础知识、实例与方法论
  • Flutter与Xamarin跨平台APP开发框架的区别
  • 【JAVA】Springboot集成Proguard完成jar包混淆
  • 全流程ArcGIS Pro技术应用
  • 4.windows ubuntu 子系统:微生物宏基因组测序和分析流程概括。
  • S2-066分析与复现
  • 让天下没有难学的大模型!我整理一份大模型技术知识图谱!
  • 大屏动效合集更更更之实现百分比环形
  • 基于springboot的反诈宣传平台
  • 面试算法-82-不同路径
  • 阿里云ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘
  • Java基础知识总结(13)
  • 杰发科技AC7801——Keil编译的Hex大小如何计算
  • opengl 学习(六)-----坐标系统与摄像机
  • 分库分表场景下多维查询解决方案(用户+商户)
  • vue学习日记14:工程化开发脚手架Vue CLI
  • java Flink(四十三)Flink Interval Join源码解析以及简单实例
  • JsonUtility.ToJson 和UnityWebRequest 踩过的坑记录
  • 面试算法-69-三角形最小路径和
  • 流畅的 Python 第二版(GPT 重译)(九)
  • 单片机学到什么程度才可以去工作?
  • 内网穿透方案
  • WordPress菜单函数wp_nav_menu各参数
  • 类于对象(上)--- 类的定义、访问限定符、计算类和对象的大小、this指针
  • 提升交付效率:Booking.com 金融技术团队的成功实践