老文章可以删了!!!。2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

news2024/10/6 16:27:56

文章内容:

一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法
1.1 方法一 :IDEA中手动打包
1.2 方法二 :build.gradle中配置后编译时打包
二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法

一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法

纯JAVA | 纯Kotlin | JAVA和Kotlin混合开发打包其实都一样的,因为jar包中主要还是class文件,而kotlin在编译后生成的也是class文件,因此不影响打包,因此以下打包jar方法适用于上述所有情况

1.1 方法一 :IDEA中手动打包

步骤1:File --> Project Structure

在这里插入图片描述

步骤二:

在这里插入图片描述

步骤三:按以下操作后点Ok

在这里插入图片描述
说明:

  1. Module:这里选择要打包的模块,一般用gradle构建的项目可以选择ALL Moudules(我就是),也可以选择main模块,根据需要选择
  2. Main Class: 这里需要选中入口函数(也就是带有main方法的函数)
    在这里插入图片描述
  3. JAR Files From librarys:这里选中第一个(extract to the target JAR — 表示把额外用到的jar包都打进我们想要打包的jar包,即打包完之后只有一个jar包) 如果选择第二个(copy to the output directory and link via manifest)则打包后会有多个jar包,如图是选择第二个打包
    在这里插入图片描述
  4. Directory for META-INF/MANIFESTMF: 这里不要选择IDEA默认是,而是要自定义(C盘 D盘任意) 否则在运行jar包时会报找不到主清单文件的错误

步骤四:操作完点击apply 再点击ok

在这里插入图片描述

在这里插入图片描述

步骤五:点击最上面的build --> Build Artifacts

在这里插入图片描述
点击后会弹出以下窗口: 选择Build即可
在这里插入图片描述
最后等它build完即可,就能在项目的out --> artifacts 下看到打包好的jar,并且在 out --> production 下看到resources文件夹
在这里插入图片描述
比如我的resources下面存放了image目录图片,那么就能看到
在这里插入图片描述
!!!注意:在此处看到resources不代表resources文件夹已经被成功打包进jar包中了
可以使用**jar tf <jar包名称>**来查看jar包的结构已经文件 (需要在jar包的所在目录下才可以)
例如:
在这里插入图片描述
在这里插入图片描述
这条指令对于测试jar包是否打包成功十分方便

第二种方式:build.gradle中配置,编译时自动打包包

配置和注释如下:(主要参考带有jar注释的地方)

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.8.0'
}

group = ''
version = ''

repositories {
    mavenCentral()
}
//设置编译时的编码
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
//设置运行时的编码
tasks.withType(JavaExec) {
    jvmArgs('-Dfile.encoding=UTF-8')
}
/**
 * 配置资源文件目录
 */
sourceSets {
    main {
        resources {
            srcDirs = ['src/main/resources']
        }
    }
}
/**
 * TODO 创建一个新的配置,继承至implementation
 * TODO 原因 : 在打包jar时  configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) } 会报错
 */
configurations {
    deployJar
    deployJar.extendsFrom(implementation)
}
/**
 * 打包jar包的配置
 */
jar {
    manifest {
        attributes 'Main-Class' : 'net.LauncherKt' //配置jar包运行时的入口
        attributes 'Custom-Attribute': 'Custom Value' // 解决jar包运行时没有主清单属性
    }
    // 解决jar包运行时没有主清单属性
    from('path/to/custom-manifest.mf')
    // 将所有编译依赖项打包到 JAR 文件中
    from {
        configurations.deployJar.collect { it.isDirectory() ? it : zipTree(it) }
    }

    // 将运行时依赖项打包到 JAR 文件中
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    // 将资源文件一并打包到jar包中
    from sourceSets.main.resources
    // 设置处理重复文件的策略
    duplicatesStrategy = 'exclude'
}


dependencies {
    implementation fileTree(dir: 'lib', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

}

只要根据上面一样在IDEA中配置build后,一编译就可以在build --> libs 下看到jar文件了

如何测试打包后的jar包是否没问题,可用指令 java -jar <jar包名> 运行jar包, 也是需要在jar包所在目录下执行指令才可以,具体参考上面的 查看jar包结构的指令使用

注意事项:

因为是利用gradle打包的,因此每次打包完后如果配置发生变动,那么就一定要清除项目clean,再重新build (maven我不清楚),如果不clean的话就会报很多错误(例如找不到什么标识can’t resolve等各种奇怪的报错)
操作如下:

1.点击Gradle

在这里插入图片描述

2. 点击项目–> Tasks --> build --> clean

在这里插入图片描述

3. clean后,再点击build

在这里插入图片描述
最后等待项目构建完即可。

二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法

这个我们需要借助exe4j这个工具来打包:
官方链接

使用方法: 利用我们上述生成的可以正常执行的jar包,然后这个这个exe4j 工具来打包。 操作很简单,如下:

1. welcome页面 ,此步骤名字和密码随便取,证书随便找一个即可

A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r

在这里插入图片描述

2.Choose project type — 此步骤选择 “JAR in EXE” mode

在这里插入图片描述

3. Configure application,配置生成的exe文件

在这里插入图片描述

4. Configure executable ,跟下图一样配置即可,如果icon不选的话,要把这个“√ ”给弄掉

在这里插入图片描述

5. Configure Java invocation – 配置java的执行

在这里插入图片描述
在这里插入图片描述
第三步选中上述生成的jar包 后可以看到一下界面,然后进行第四步
在这里插入图片描述
在这里插入图片描述
此处显示的内容是exe4j自动在jar包中找到的,加入显示一片空白,那么说明jar包打不成功(有些文件没打进来)

6. Configure JRE, 就是配置程序运行的版本,这个可以结合自己程序所用的配置来配置即可,我的是1.8

在这里插入图片描述
注意:6这里,如果生成的exe放在没有java环境的电脑里面,需要在6这里多使用一个操作

在这里插入图片描述
将环境变量JAVA_HOME给删了

7,8直接点下一步即可

9. 在8这里点击下一步的时候就会进入,且还会自动执行

在这里插入图片描述
等它执行完成后就会自动跳到10
注意:如果此步骤报错那就检查之前的步骤有没有弄对(当然,jar包打包不成功此处也会报错)

10. 在 9 成功后就可以在刚刚配置的exe输出的路径中找到对应的程序了

在这里插入图片描述
生成后的程序:
在这里插入图片描述

最后: 请注意,如果程序中有使用资源文件resources的时候,那么在打包jar包的时候,需要把resources文件夹加入jar中。 且还要查看是否加入成功。 (可以用指令查看) ,操作请看上文。

如果按照上述操作后,还不能打包jar成功或者打包exe成功的读者,可以私信把问题发给我讨论讨论

转发请注明出处,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Jetpack Compose 实现 ViewPager2

在此博客中&#xff0c;我们将介绍如何在Jetpack Compose中实现ViewPager2的功能。我们将使用Accompanist库中的Pager库&#xff0c;这是由Google开发的一个用于Jetpack Compose的库。 首先&#xff0c;需要将Pager库添加到你的项目中&#xff1a; implementation androidx.co…

投票活动链接制作方法网络投票办法公众号做投票链接

用户在使用微信投票的时候&#xff0c;需要功能齐全&#xff0c;又快捷方便的投票小程序。 而“活动星投票”这款软件使用非常的方便&#xff0c;用户可以随时使用手机微信小程序获得线上投票服务&#xff0c;很多用户都很喜欢“活动星投票”这款软件。 “活动星投票”小程序在…

ModelScope魔搭社区AI模型下载数据可能存在严重造假问题

目录 摘要&#xff1a; 一、数据分析 二、可能存在的问题 三、结论与建议 摘要&#xff1a; ModelScope魔搭社区作为一个AI模型共享平台&#xff0c;旨在提供各种领域的模型供用户下载和使用。然而&#xff0c;通过对其提供的数据进行分析&#xff0c;发现其中存在一定的数…

【Flutter】built_value 解决 Flutter 中的不可变性问题

文章目录 一、 前言二、 什么是 built_value&#xff1f;三、 为什么我们需要 built_value&#xff1f;四、 如何在 Flutter 中安装和设置 built_value&#xff1f;五、 如何使用 built_value 创建不可变的值类型&#xff1f;六、 如何使用 built_value 创建枚举类&#xff1f;…

pcl基于八叉树进行空间划分和搜索操作

建立空间索引在点云数据处理中已被广泛应用&#xff0c;常见空间索引一般是自顶向下逐级划分空间的各种空间索引结构&#xff0c;比较有代表性的包括 BSP 树、KD 树、KDB 树、 R树、R树、CELL 树、四叉树和八叉树等索引结构&#xff0c;而在这些结构中 KD 树和八叉树在 3D点云数…

使用键鼠网络共享用windows控制ubuntu,实现跨屏跨系统操作

经调研发现几种网络共享鼠标方案&#xff1a;sharemouse、synergy以及Barrier&#xff0c;由于没找到合适的资料去配置sharemouse&#xff0c;synergy又收费&#xff0c;所以使用Barrier。 一、Ubuntu安装Barrier 到Ubuntu软件商城搜索Barrier点击安装即可&#xff0c;这就不再…

学成在线----day8

1、课程发布 为了提高网站的速度需要将课程信息进行缓存&#xff0c;并且要将课程信息加入索引库方便搜索&#xff0c;下图显示了课程发布后课程信息的流转情况&#xff1a; 1、向内容管理数据库的课程发布表存储课程发布信息&#xff0c;更新课程基本信息表中发布状态为已发…

【Shell】读取用户终端输入内容

授权 cd /Users/lion/Downloads/shell-test-demos chmod ux *.shread_user_enter.sh #!/bin/bashprintHelp() {echo "1. hello"echo "2. world"echo "0. exit" }printHelpnumber"" while [ -z $number ]; doread -p "enter a n…

干货,让微信群活跃的秘籍

微信用户数量庞大、使用率高&#xff0c;是很多企业/商家做社群营销的第一平台&#xff0c;所以目前有很多微信社群营销管理系统。我一直在用的一个多群管理工具---微信管理系统&#xff0c;对于新手来说&#xff0c;操作也是十分的简单易上手&#xff0c;每一步都有教程指导&a…

网站被黑挂马应该怎么解决

遇到网站被黑或者被挂马&#xff0c;其实都是很正常的现象&#xff0c;做网站的站长&#xff0c;几乎都有网站被黑的历史 遇到这种问题&#xff0c;首先&#xff1a; 检查网站源文件的日期&#xff0c;回顾一下在过去一段时间里面&#xff0c;你有没有对源文件做过改动&#x…

程序员性能之道,从使用perf开始!

一、perf简介 从2.6.31内核开始&#xff0c;Linux内核自带了一个性能分析工具perf&#xff0c;能够进行函数级与指令级的热点查找。通过它&#xff0c;应用程序可以利用 PMU&#xff0c;tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题…

Apikit 自学日记:使用脚本处理数据

脚本分为 前置脚本 和 后置脚本 两种&#xff0c;分别对应 API 请求前 和 返回数据后 的两个阶段。您可以通过编写 Javascript 代码&#xff0c;在 API 前置脚本中改变请求参数&#xff0c;或者是在 API 后置脚本中改变返回结果。 脚本常用于以下几种情况&#xff1a; API 请求…

【夜深人静学数据结构与算法 | 第十一篇】枚举算法

目录 前言&#xff1a; 枚举算法&#xff1a; 优点&#xff1a; 枚举算法的种类&#xff1a; 枚举算法案例&#xff1a; 343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09; 12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&…

video-05-videojs编写(全屏、非全屏)自定义控件!!!!

兄弟们&#xff01;&#xff01;看到这里&#xff0c;你马上就可以自定义控件了&#xff0c;想想是不是都激动啊&#xff0c;但是这篇文章重在思路及简单实现&#xff0c;仔细看。 目录 一、控件分类 二、实现方案&#xff08;方案二最好&#xff09; 2.1 方案1&#xff08;…

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate

前端Vue自定义轮播图swiper 轮播图dot 轮播图指示indicate&#xff0c;下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13193 效果图如下: ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ​…

BACnet网关如何采集Modbus RTU设备转BACnet IP协议

BACnet标准是针对采暖、通风、空调、制冷控制设备设计的&#xff0c;同时也是为其他楼宇控制系统(例如照明&#xff0c;安保&#xff0c;消防等系统)的集成提供一个基本原则。 本文主要讲述了BACnet网关采集Modbus RTU设备&#xff08;M140T&#xff09;&#xff0c;将Modbus …

servlet拓展-统一响应json功能、全局异常处理

servlet拓展-统一响应json功能、全局异常处理 一、baseservlet import com.fasterxml.jackson.databind.ObjectMapper; import teamwork.com.utils.ApiResult;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.Htt…

解决IDEA连接数据库后,xml中写SQL语句不提醒数据库表字段问题

有时候我们新建了一个项目&#xff0c;或者新建了一个工程&#xff0c;明明为此项目或者工程连接了数据库&#xff0c;并且一切正确&#xff0c;但是在xml中书写SQL语句就是不提示数据库表中的相关字段&#xff0c;无论是表名也好&#xff0c;还是字段名也好&#xff0c;通通不…

信号链噪声分析15

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 模数转换器(ADC)将模拟量——现实世界中绝大部分现象的特征——转换为数字语言&#xff0c; 以便用于信息处理、计算、数据传输和控制系统。数模转换器(DAC)则用于将发送或存 储…

信号链噪声分析17

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 只是快速阅读 HarryNyquist 于 1924 年发表的《贝尔系统技术杂志》经典文章&#xff0c;并不 足以了解以其名字命名的该项准则的真正意义。当时&#xff0c;Nyquist 正致力于研…