教程:创建您的第一个 Kotlin 应用程序
打包为 JAR至此,您已经知道如何编写代码并从 IntelliJ IDEA 运行它,这在开发过程中是很方便的。 但是,这并不是用户应该运行应用程序的方式。 为了使用户能够在他们的计算机上运行,我们将构建并打包该应用程序为 jar 文件。
JAR 是一种用于将应用程序分发为单个文件的文件格式。
构建该应用程序包括以下步骤:
编译源代码——在此步骤中,您将刚写的代码翻译成JVM字节码。 编译后的源文件具有 .class 扩展名。
为了使应用程序正常运行,我们需要提供其所依赖的库。 对于此项目,唯一需要的库是 Kotlin 运行时,但仍需包括在内。 否则,用户每次运行程序时都必须自己提供,这不是很方便。
编译过的源代码和依赖项都最终存储在生成的 .jar 文件中。 构建过程的结果如 .jar 文件称为 构件。
提供的说明适用于 Gradle 和 Kotlin 作为 DSL。 如需了解如何使用其他构建工具实现相同功能,请使用页面顶部的 构建工具 切换器。
提供了 Gradle 和 Groovy 作为 DSL 的说明。 如需了解如何使用其他构建工具实现相同功能,请使用页面顶部的 构建工具 切换器。
这些指示是为 Maven 提供的。 如需了解如何使用其他构建工具实现相同功能,请使用页面顶部的 构建工具 切换器。
此说明适用于 IntelliJ 构建工具。 如需了解如何使用其他构建工具实现相同功能,请使用页面顶部的 构建工具 切换器。
打开 build.gradle.ktsbuild.gradle 脚本。
构建脚本是告诉构建工具如何精确构建项目的文件。
构建脚本是告诉构建工具如何精确构建项目的文件。 它是用 Kotlin 编写的,就像您的程序的源代码一样。
在构建脚本中,添加以下任务定义:
tasks.jar.configure {
manifest {
attributes(mapOf("Main-Class" to "org.example.MainKt"))
}
configurations["compileClasspath"].forEach { file: File ->
from(zipTree(file.absoluteFile))
}
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
tasks.jar {
manifest {
attributes 'Main-Class': 'org.example.MainKt'
}
from {
configurations.runtimeClasspath.collect { file ->
file.isDirectory() ? file : zipTree(file)
}
}
}
清单 部分指定了程序的入口点。 当您将 "Main-Class" 设置为 "org.example.MainKt" 时,您是在告诉 JAR 文件 "org.example.MainKt" 是入口点,表明 MainKt 类位于 org.example 包中。 这是使 JAR 文件可执行所必需的。
其余代码告诉构建工具递归扫描项目中的依赖项并将其包含在构建中。
当定义被添加到构建文件时,请按 Ctrl+Shift+O 或点击 在 Gradle 工具窗口中导入这些更改。
在右侧边栏中,打开 Gradle 并运行 jar 任务(任务 | build | jar)。 如果侧边栏不存在,请转到主菜单中的 视图 | 外观 并切换 工具窗口栏 菜单选项。
生成的 JAR 出现在 build/libs 目录中。
在主菜单中,前往 文件 | 项目结构 Ctrl+Alt+Shift+S 并打开 工件 选项卡。
点击 添加 ,然后 JAR ,然后 从依赖关系模块。
在 主类 字段中,点击 浏览 按钮,并选择 Main.kt 作为主类。
请指定绝对路径 /src/main/resources 作为清单目录,例如: /Users/jetbrains/IdeaProjects/greeting/src/main/resources。
点击 OK 在 从模块创建 JAR 对话框。
点击 OK 在 项目结构 对话框。
在主菜单中,前往 构建 | 构建工件 ,然后点击 构建。
生成的 JAR 出现在 出 目录中。
随便看看
- 2025-05-10 14:40:01立昂微三大业务分析3---砷化镓代工
- 2025-06-14 14:31:36中朝边境的朝鲜美女之谜:她们跨越鸭绿江究竟为了什么?
- 2025-05-22 05:44:45【运维】Jenkins入门:什么是Jenkins以及为什么我们需要它?
- 2025-06-02 22:28:3450部经典百合电影评分,看一下你你是否曾经也偷偷看过这些电影
- 2025-05-13 14:35:50八字情人星是什么意思(八字看情人之间的关系)
- 2025-05-29 15:03:07CELERITAS II 電競鍵盤|BenQ ZOWIE Taiwan
- 2025-05-15 05:26:49天猫和唯品会哪个值得信赖?有什么区别?
- 2025-06-09 20:44:31栝楼(栝樓)的意思
- 2025-05-23 22:04:07西瓜报价
- 2025-05-23 09:20:46兼顾性能与便携 ThinkPad X250评测