前言

我想快速入门Kotlin,所以想直接写一个简单的练手项目,虽然最后也是用了电子铅笔(指AI),通过观察AI的代码,我还是有了一点点进步吧。

这不,这个纯Kotlin项目,我打算用launch4j打包为可执行文件,然后好在朋友们面前炫耀一番。

准备工作

这是我项目中的源文件结构:

src目录
root
├─src
│ main.kt
│ WeatherAnalyzer.kt
│ WeatherCondition.kt
│ WeatherFetcher.kt

可以看到,这是一个简单的Kotlin项目,只有四个文件,其中main.kt是程序的入口。

在打包之前,我已经用IDEA成功运行了程序,这意味这打包所需的文件已经在IDEA默认的构建目录中生成好了:

out目录
root
├─out
│  └─production
│      └─KotlinStudy
│            MainKt$main$1.class
│            MainKt.class
│            WeatherAnalyzer.class
│            WeatherAnalyzerKt.class
│            WeatherCondition$Cloudy.class
│            WeatherCondition$Foggy.class
│            WeatherCondition$Rainy.class
│            WeatherCondition$Snowy.class
│            WeatherCondition$Sunny.class
│            WeatherCondition.class
│            WeatherConditionKt$findMaxTemperatureChangePeriod$$inlined$sortedBy$1.class
│            WeatherConditionKt.class
│            WeatherData.class
│            WeatherFetcher$fetchWeatherData$2.class
│            WeatherFetcher$fetchWeatherUpdates$1$weatherData$1.class
│            WeatherFetcher$fetchWeatherUpdates$1.class
│            WeatherFetcher.class
│            WeatherFetcherKt$test5$1$updatesJob$1$1.class
│            WeatherFetcherKt$test5$1$updatesJob$1.class
│            WeatherFetcherKt$test5$1.class
│            WeatherFetcherKt.class
│            WeatherUtils$WeatherConverter.class
│            WeatherUtils.class
│          │
│          └─META-INF
│                  KotlinStudy.kotlin_module

这主意还是DeepSeek想的。

打包项目JAR

复制编译好的类文件

使用以下的命令将编译好的类文件复制到classes目录下:

1copy_class.bat
chcp 65001
@REM 直接使用 IntelliJ 编译好的类文件(从输出目录复制)
mkdir classes
xcopy /E /I "D:\programing\Kotlin\KotlinStudy\out\production\KotlinStudy\*" "classes\"

复制依赖库

iTip

这个视各项目而定

可以在IDEA中查看自己项目依赖了哪些库,可以手动将这些库的jar文件复制到当前的lib目录中:

alt text

也可以让AI帮你生成复制脚本:

在运行时查看调用了哪些jar

alt text

2copy_deps.bat
chcp 65001
@echo off
echo 复制依赖库...

if exist libs rmdir /s /q libs
mkdir libs

copy "C:\Users\user\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\2.3.0\kotlin-stdlib-2.3.0.jar" libs\
copy "C:\Users\user\.m2\repository\com\google\code\gson\gson\2.13.2\gson-2.13.2.jar" libs\
copy "C:\Users\user\.m2\repository\org\jetbrains\kotlinx\kotlinx-coroutines-core\1.10.2\kotlinx-coroutines-core-1.10.2.jar" libs\
copy "C:\Users\user\.m2\repository\org\jetbrains\kotlinx\kotlinx-coroutines-core-jvm\1.10.2\kotlinx-coroutines-core-jvm-1.10.2.jar" libs\
copy "C:\Users\user\.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar" libs\
copy "C:\Users\user\.m2\repository\com\google\errorprone\error_prone_annotations\2.41.0\error_prone_annotations-2.41.0.jar" libs\

echo 依赖库复制完成!
pause

创建 JAR 文件

3create_jar.bat
chcp 65001
@echo off
echo 创建 JAR 文件...

REM 创建清单文件
(
echo Manifest-Version: 1.0
echo Main-Class: MainKt
echo Class-Path: libs/kotlin-stdlib-2.3.0.jar libs/gson-2.13.2.jar libs/kotlinx-coroutines-core-1.10.2.jar libs/kotlinx-coroutines-core-jvm-1.10.2.jar
echo.
) > manifest.txt

REM 创建 JAR
cd classes
"D:\Program Files\Java\jdk-21.0.10\bin\jar" -cfm ..\KotlinStudy.jar ..\manifest.txt .
cd ..

echo JAR 创建完成!
pause

打包成exe文件

这里采用开源的launch4j工具,它可以将JAR包转换为可执行的exe文件。

下载launch4j

https://launch4j.sourceforge.net/

安装不必说,网上有很多教程,这里不再赘述。

用launch4j打包的流程可以参考:

Launch4j下载、安装和使用教程(附安装包)-51CTO博客

Launch4j下载安装和使用图解(附安装包)-CSDN

输出文件名可以自定义,jar选刚刚生成的jar文件。

这里注意一下,打包成exe点击的按钮是这个:

alt text

成功后logsuccessfully字样。

结果

我的目录内算是比较狼藉的,生成的exe只有几kb,在我的机器上可以运行,但是别的就不知道了

alt text

alt text




换个位置就不行了,看来还有依赖:

alt text

这是能成功运行的条件:

alt text

所有文件加起来不超过4mb,如此强劲,令人惊叹!