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

HoRain云--Kotlin命令行编译终极指南:从入门到精通

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

Kotlin 命令行编译完整指南

一、环境准备

1. 安装 Kotlin 编译器

2. 验证安装

二、基本编译和运行

1. 创建一个简单的 Kotlin 文件

2. 编译为 JAR 文件

3. 运行程序

三、编译选项详解

1. 输出相关选项

2. 包含运行时

3. 类路径和依赖

4. 编译器选项

四、多文件编译

1. 编译多个文件

2. 示例项目结构

五、使用 KTS 脚本

1. 创建 Kotlin 脚本文件

2. 运行脚本

3. 脚本编译选项

六、使用 kts 编译器工具

1. kotlinc-js(编译到 JavaScript)

2. kotlinc-native(编译到原生)

七、高级编译配置

1. 使用模块文件

2. 生成文档

3. 增量编译

八、编译示例项目

1. 简单多文件项目

2. 使用外部库的项目

九、使用 Gradle 构建(替代方案)

1. 创建简单的 build.gradle.kts

2. 构建和运行

十、故障排除

1. 常见错误及解决方案

2. 调试编译

十一、优化技巧

1. 使用编译缓存

2. 并行编译

3. 优化输出大小

十二、实用脚本

1. 自动编译和运行脚本

2. 监视并自动编译

总结


Kotlin 命令行编译完整指南

Kotlin 提供了多种命令行编译方式,让你可以在不依赖 IDE 的情况下编译和运行 Kotlin 程序。

一、环境准备

1. 安装 Kotlin 编译器

方法一:通过 SDKMAN!(Linux/macOS)

# 安装 SDKMAN curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" # 安装 Kotlin sdk install kotlin

方法二:通过 Homebrew(macOS)

brew update brew install kotlin

方法三:手动安装

  1. 访问 Kotlin 发布页面

  2. 下载 kotlin-compiler-*.zip

  3. 解压并添加到 PATH

  4. .bashrc.bash_profile中添加:

export PATH=/path/to/kotlinc/bin:$PATH

方法四:通过包管理器(Windows)

# 使用 Chocolatey choco install kotlin # 或使用 Scoop scoop install kotlin

方法五:通过包管理器(Linux)

# Ubuntu/Debian sudo snap install --classic kotlin # 或从下载页面下载 tar.gz

2. 验证安装

kotlinc -version # 应显示类似:info: kotlinc-jvm 1.9.0 (JRE 11.0.19)

二、基本编译和运行

1. 创建一个简单的 Kotlin 文件

创建hello.kt

fun main() { println("Hello, Kotlin!") }

2. 编译为 JAR 文件

# 基本编译(包含运行时) kotlinc hello.kt -include-runtime -d hello.jar # 编译不包含运行时(需要 Kotlin 运行时库) kotlinc hello.kt -d hello.jar

3. 运行程序

# 如果编译时包含了运行时 java -jar hello.jar # 如果编译时不包含运行时 kotlin hello.jar # 或 java -cp "hello.jar:$KOTLIN_HOME/lib/kotlin-stdlib.jar" HelloKt

三、编译选项详解

1. 输出相关选项

# 指定输出文件/目录 kotlinc hello.kt -d output.jar kotlinc hello.kt -d output/ # 指定输出格式 kotlinc hello.kt -d output.jar # JAR 文件 kotlinc hello.kt -d output/ # 目录

2. 包含运行时

# 包含标准库和运行时 kotlinc hello.kt -include-runtime -d app.jar # 指定运行时版本 kotlinc hello.kt -kotlin-home /path/to/kotlin -d app.jar

3. 类路径和依赖

# 添加类路径 kotlinc hello.kt -cp libs/* -d app.jar # 添加多个依赖 kotlinc hello.kt -cp "lib1.jar:lib2.jar:/path/to/lib" -d app.jar

4. 编译器选项

# 启用详细输出 kotlinc hello.kt -verbose -d app.jar # 指定 Java 版本 kotlinc hello.kt -jvm-target 11 -d app.jar # 启用警告 kotlinc hello.kt -Werror -d app.jar kotlinc hello.kt -nowarn -d app.jar # 禁用警告 # 指定语言版本 kotlinc hello.kt -language-version 1.9 -d app.jar kotlinc hello.kt -api-version 1.9 -d app.jar

四、多文件编译

1. 编译多个文件

# 列出所有文件 kotlinc file1.kt file2.kt file3.kt -include-runtime -d app.jar # 使用通配符 kotlinc src/*.kt -include-runtime -d app.jar # 递归编译 kotlinc src/**/*.kt -include-runtime -d app.jar

2. 示例项目结构

myapp/ ├── src/ │ ├── main.kt │ ├── utils/ │ │ └── StringUtils.kt │ └── models/ │ └── User.kt └── lib/ └── dependency.jar

编译命令:

kotlinc src/*.kt src/utils/*.kt src/models/*.kt -cp lib/dependency.jar -include-runtime -d myapp.jar

五、使用 KTS 脚本

1. 创建 Kotlin 脚本文件

创建script.kts

#!/usr/bin/env kotlin @file:DependsOn("com.google.code.gson:gson:2.8.9") import com.google.gson.Gson val gson = Gson() println(gson.toJson(mapOf("message" to "Hello from Kotlin Script!")))

2. 运行脚本

# 直接运行 kotlin script.kts # 或作为可执行文件 chmod +x script.kts ./script.kts

3. 脚本编译选项

# 预编译脚本以提高性能 kotlinc -script script.kts -main com.example.MyScript -d script.jar # 运行预编译的脚本 kotlin script.jar

六、使用 kts 编译器工具

1. kotlinc-js(编译到 JavaScript)

# 安装 Kotlin/JS # 通常与 kotlinc 一起安装 # 编译到 JavaScript kotlinc-js hello.kt -output hello.js # 运行 node hello.js

2. kotlinc-native(编译到原生)

# 安装 Kotlin/Native # 下载并解压到独立目录 # 编译到可执行文件 kotlinc-native hello.kt -o hello # 运行 ./hello.kexe

七、高级编译配置

1. 使用模块文件

创建module.xml

<module name="myapp" version="1.0"> <sources> <dir>src/main/kotlin</dir> </sources> <dependencies> <jar>lib/dependency.jar</jar> </dependencies> </module>

编译:

kotlinc -module-xml module.xml -d myapp.jar

2. 生成文档

# 生成 KDocs kotlinc hello.kt -d hello.jar -include-runtime -dokka # 指定文档格式 kotlinc hello.kt -d hello.jar -include-runtime -dokka -format html

3. 增量编译

kotlinc hello.kt -d output/ -Xincremental

八、编译示例项目

1. 简单多文件项目

目录结构:

calc/ ├── src/ │ ├── main.kt │ └── math/ │ ├── Calculator.kt │ └── Operations.kt └── build.sh

src/main.kt:

import math.Calculator fun main() { val calc = Calculator() println("5 + 3 = ${calc.add(5, 3)}") println("10 - 4 = ${calc.subtract(10, 4)}") }

src/math/Calculator.kt:

package math class Calculator { fun add(a: Int, b: Int): Int = a + b fun subtract(a: Int, b: Int): Int = a - b fun multiply(a: Int, b: Int): Int = a * b fun divide(a: Int, b: Int): Int = a / b }

编译脚本 build.sh:

#!/bin/bash # 创建输出目录 mkdir -p out # 编译所有 Kotlin 文件 kotlinc src/*.kt src/math/*.kt -include-runtime -d out/calc.jar echo "编译完成!运行: java -jar out/calc.jar"

2. 使用外部库的项目

build.sh:

#!/bin/bash # 创建 lib 目录并下载依赖 mkdir -p lib cd lib # 下载依赖(示例:Gson) if [ ! -f gson-2.8.9.jar ]; then wget https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar fi cd .. # 编译 kotlinc src/*.kt -cp "lib/*" -include-runtime -d app.jar echo "编译完成!运行: java -jar app.jar"

九、使用 Gradle 构建(替代方案)

虽然命令行编译简单,但对于复杂项目建议使用构建工具:

1. 创建简单的 build.gradle.kts

plugins { kotlin("jvm") version "1.9.0" } group = "com.example" version = "1.0" repositories { mavenCentral() } dependencies { implementation(kotlin("stdlib")) } tasks.jar { manifest { attributes["Main-Class"] = "com.example.MainKt" } from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) }

2. 构建和运行

# 构建 ./gradlew build # 运行 java -jar build/libs/myapp-1.0.jar

十、故障排除

1. 常见错误及解决方案

错误:未找到 kotlinc 命令

# 检查 PATH echo $PATH # 手动指定路径 /opt/kotlinc/bin/kotlinc hello.kt -d hello.jar

错误:找不到主类

# 确保 main 函数存在 # 检查 MANIFEST.MF jar tf hello.jar | grep META-INF # 或指定主类运行 kotlin -classpath hello.jar HelloKt

错误:不支持的类文件版本

# 指定 JVM 目标版本 kotlinc hello.kt -jvm-target 1.8 -d hello.jar # 检查 Java 版本 java -version

错误:内存不足

# 增加堆内存 kotlinc -J-Xmx2g hello.kt -d hello.jar

2. 调试编译

# 显示详细输出 kotlinc -verbose hello.kt -d hello.jar # 显示编译时间 kotlinc -Xreport-perf hello.kt -d hello.jar # 生成 IR 树 kotlinc hello.kt -Xdump-declarations-to=declarations.txt

十一、优化技巧

1. 使用编译缓存

# 启用编译缓存 kotlinc hello.kt -d out/ -Xuse-fir-lm # 清理缓存 rm -rf ~/.kotlin/

2. 并行编译

# 启用并行编译 kotlinc hello.kt -Xmulti-platform -d hello.jar

3. 优化输出大小

# 启用 ProGuard/R8 kotlinc hello.kt -include-runtime -d hello.jar -Xuse-r8

十二、实用脚本

1. 自动编译和运行脚本

build-and-run.sh:

#!/bin/bash # 配置 SOURCE_DIR="src" OUTPUT_JAR="app.jar" MAIN_CLASS="MainKt" # 清理 rm -f $OUTPUT_JAR # 编译 echo "正在编译..." kotlinc $SOURCE_DIR/*.kt -include-runtime -d $OUTPUT_JAR if [ $? -eq 0 ]; then echo "编译成功!" echo "运行程序..." echo "================================" java -jar $OUTPUT_JAR else echo "编译失败!" exit 1 fi

2. 监视并自动编译

watch-and-build.sh:

#!/bin/bash # 监视文件变化并自动编译 watch_dir="src" output_jar="app.jar" echo "正在监视 $watch_dir 目录中的 Kotlin 文件..." # 使用 inotifywait (Linux) 或 fswatch (macOS) # Linux: inotifywait -m -r -e modify,create,delete "$watch_dir" | while read -r directory events filename; do if [[ "$filename" == *.kt ]]; then echo "检测到变化: $filename" kotlinc "$watch_dir"/*.kt -include-runtime -d "$output_jar" if [ $? -eq 0 ]; then echo "$(date): 编译成功" fi fi done

总结

Kotlin 命令行编译提供了灵活的选项:

  1. 基本编译kotlinc file.kt -include-runtime -d output.jar

  2. 运行程序java -jar output.jarkotlin output.jar

  3. 多文件编译:列出所有文件或使用通配符

  4. 添加依赖:使用-cp参数指定类路径

  5. 脚本支持:使用.kts文件编写可执行脚本

对于简单项目,命令行编译足够使用。对于复杂项目,建议使用构建工具如 Gradle 或 Maven。命令行编译是学习 Kotlin 和快速原型开发的好方法,也适合 CI/CD 环境中的自动化构建。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/643992/

相关文章:

  • 剖析比较好的全脑教育企业,教学质量与市场口碑深度解读 - mypinpai
  • 非视距·自愈·广覆盖|黎阳之光1.45.8GHz宽带自愈网无线基站,重构工业级无线通信
  • 【异常】Cursor报错We‘re having trouble connecting to the model provider. This might be temporary
  • AnyChart 的tagCloud组件
  • 别再让电源振荡了!手把手教你给UC3842加斜坡补偿(附计算步骤)
  • 3步解决乐谱数字化难题:Audiveris OMR引擎从图像到可编辑乐谱的完整实践指南
  • 【从0到1构建一个ClaudeAgent】规划与协调-任务系统
  • 2026年好用的高精度线材轧机推荐,企业选择探讨 - myqiye
  • 基于Qwen3.5-2B的MySQL智能运维助手:安装配置与性能调优
  • 从PRT到STP:除了批量转换,工程师更该关心的数据完整性与版本管理
  • StructBERT在不同行业术语下的相似度计算适应性展示
  • AI 名片的核心功能拆解:哪些功能是企业真正需要的?(避坑指南)
  • 2026商务出行平台推荐:企业差旅痛点分析与数字化解决方案 - 匠言榜单
  • 如何通过手机号找回QQ号:3分钟快速解决方案
  • 2/3英寸靶面工业镜头配置全攻略:如何用25mm焦距实现0.05mm检测精度
  • 3步解决Windows多语言软件兼容性问题:Locale Emulator完全指南
  • 三步搞定Windows语音转文字:免费离线神器深度解析
  • RoadRunner场景建模避坑指南:从FBX模型导入到Simulink联合仿真全流程解析
  • 武汉佰利和建筑防水工程有限公司:武汉防水维修电话 - LYL仔仔
  • 3个维度重新定义SillyTavern:从技术工具到情感伙伴的进化之路
  • PyTorch 2.8通用镜像惊艳效果:RTX 4090D跑Llama3-70B推理延迟实测分享
  • 3步解锁网易云音乐:ncmdump让NCM格式文件随处播放
  • 终极Windows 11安装指南:MediaCreationTool.bat让老旧电脑轻松升级
  • 2026年实测10款硬核论文降AI工具:高效降低AI率,AI率降至6% - 降AI实验室
  • 别再混淆了!5分钟搞懂ARM Cortex-M的异常、中断、NVIC和向量表到底啥关系
  • <项目代码>yolo 胸部X光疾病识别<目标检测>
  • 如何找到靠谱的大润发购物卡回收渠道? - 团团收购物卡回收
  • 西门子S7-1200 PLC博途全方位学习包
  • LLM核心参数配置指南:基础篇 - AI
  • intv_ai_mk11开源模型优势:Apache 2.0协议商用友好,支持商业闭源集成与白标定制