将java程序打包成可执行文件的实现方式

 更新时间:2025年02月24日 15:45:22   作者:jforgame  
本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带工具(jpackage),每种方法都有其优缺点,可根据实际需求选择合适的方式

1.问题提出

当你写了一个很炫酷的java小游戏,你迫不及待想给朋友分享。然而,你发给朋友之后,他却表示无法执行。因为我们无法保证其他人的电脑上已经安装了java运行环境。

所以,我们有哪些方法把我们的炫酷代码分享给朋友呢?

2.如何将java程序打包成可执行文件

这里介绍两种方式。

2.1将编译后的代码及jre运行环境一起打包

1. 将程序编译后,拷贝一份jre环境,放在同一个文件目录下,如下图所示

2. 新建一个文件,命名为start.bat。输入以下内容

set Path="jre1.8.0_261\bin" 
java Main
pause

解释下这几句批处理代码

  • 第一句:设置局部环境变量(常规jdk环境变量是全局配置)。由于此处环境变量的作用只在此处运行代码有效,所以只引入jre配置则可。
  • 第二句:运行java类文件或者jar文件(按实际情况修改成别的启动命令)
  • 第三句:暂停该批处理程序(没有这一句程序会一闪而过)

2.2使用第三方打包工具

可以使用第三方打包工具,直接打包成系统可执行文件,例如windows的exe程序。

下面以launch4j作为演示,下载地址:launch4j官网

  • 打开Launch4j,点击"New configuration file"新建一个配置文件;
  • 设置输入选项,指定主类名称和JRE路径;
  • 添加输出选项,指定生成的EXE文件名称和位置;
  • 完成配置后,点击"Build wrapper"构建wrapper;
  • 最后点击"Save config as..."保存配置文件。

根据自己的需求修改配置文件中的参数,然后点击"Build"按钮就可以生成可执行的EXE文件了。

launch4j的功能很完善,可以定制程序图标,设置运行jvm参数等等,也支持把jre一起打进程序或者从指定网站下载。

2.3使用jdk自带的jpackage工具

jpackage 是从 Java 14 开始提供的一个工具,它允许开发者为 Java 应用程序生成特定系统平台的可执行程序,而不需要在目标系统上预先安装 Java 运行时环境(JRE)。

jpackage 通过将 JRE 和应用程序的 JAR 文件以及所有必要依赖项打包在一起,生成特定平台的可执行程序,例如 Windows 上的 .exe 文件或 macOS 上的 .dmg 文件。

使用 jpackage 的好处包括:

  1. 无需安装 Java:用户无需在本地安装 Java 即可运行应用程序。
  2. 易于分发:生成的可执行文件或安装程序可以轻松地在目标平台上分发和安装。
  3. 自定义jpackage 支持自定义应用名称、图标等,提供了丰富的自定义选项。
  4. 跨平台:虽然每种格式必须在相应的平台上构建,但 jpackage 本身支持跨平台生成不同的包格式。

基本的 jpackage 使用示例如下:

jpackage --input . --name YouAppName --main-jar yourapp.jar

对于 Windows 平台,jpackage 需要 WiX 工具来生成安装程序,并且可能需要额外的参数来指定控制台模式、快捷方式等2。

此外,jpackage 可以与 jlink 工具结合使用,创建自定义的 Java 运行时映像,进一步减小应用程序的大小并优化性能3。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Swagger中@API tags中含有中文异常问题的解决

    Swagger中@API tags中含有中文异常问题的解决

    这篇文章主要介绍了Swagger中@API tags中含有中文异常问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • JVM核心教程之JVM运行与类加载全过程详解

    JVM核心教程之JVM运行与类加载全过程详解

    我们都知道一个java程序运行要经过编译和执行,但是这太概括了,中间还有很多步骤,下面这篇文章主要给大家介绍了关于JVM核心教程之JVM运行与类加载全过程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-04-04
  • Feign远程调用传递对象参数并返回自定义分页数据的过程解析

    Feign远程调用传递对象参数并返回自定义分页数据的过程解析

    这篇文章主要介绍了Feign远程调用传递对象参数并返回自定义分页数据的过程解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • TreeSet判断重复元素解析及代码示例

    TreeSet判断重复元素解析及代码示例

    这篇文章主要介绍了TreeSet判断重复元素解析及代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • java校验String是否符合时间格式yyyy-MM-dd HH:mm:ss的几种方法

    java校验String是否符合时间格式yyyy-MM-dd HH:mm:ss的几种方法

    在实际项目开发中,跟时间参数打交道是必不可少的,为了保证程序的安全性、健壮性,一般都会对参数进行校验,这篇文章主要介绍了java校验String是否符合时间格式yyyy-MM-dd HH:mm:ss的几种方法,需要的朋友可以参考下
    2025-07-07
  • 基于OpenCV与JVM实现矩阵处理图像

    基于OpenCV与JVM实现矩阵处理图像

    本文主要介绍了Java图像处理实战之基于OpenCV与JVM实现矩阵处理图像。文中的示例代码讲解详细,对我们学习图像处理有一定的帮助,感兴趣的可以试一试
    2022-01-01
  • IDEA使用Git对分支进行开发合并的全过程

    IDEA使用Git对分支进行开发合并的全过程

    本文介绍了在IDEA中使用Git进行分支开发和合并的具体操作步骤,并分享了全局用户名和邮箱的配置命令,帮助开发者规范高效地管理项目分支,需要的朋友可以参考下
    2025-10-10
  • Java杂谈之合格程序员一定要会阅读别人的源码

    Java杂谈之合格程序员一定要会阅读别人的源码

    阅读别人的代码作为开发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验
    2021-09-09
  • 基于Scala和Java方法的相互调用

    基于Scala和Java方法的相互调用

    这篇文章主要介绍了Scala和Java方法的相互调用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解IDEA自定义注释模板(javadoc)

    详解IDEA自定义注释模板(javadoc)

    这篇文章主要介绍了详解IDEA自定义注释模板(javadoc),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论