6 月 24 日,JetBrains 发布了 Kotlin Toolchain 0.11.0。
以后创建、构建、运行、测试、发布 Kotlin 项目,入口会逐步收敛到一个 kotlin 命令。

从 Amper 到 Toolchain
Amper 之前做的是声明式构建体验,项目里用 module.yaml、project.yaml 管模块、依赖和产品类型。0.11.0 之后,Amper 变成 Kotlin Toolchain,项目也进入 Alpha 阶段。
这个变化不是把 Gradle 项目直接替换掉。更准确地说,它把 Amper 里已经做出来的构建能力放到 Kotlin Toolchain 里,然后用 kotlin 作为统一入口。新项目可以用这个入口创建、构建、运行、测试;已有 Amper 项目要换 wrapper 和 IDE 插件。
bash
amper -> kotlin
amper.bat -> kotlin.bat
Amper IDE plugin -> Kotlin Toolchain IDE plugin
如果之前已经在项目里提交过 Amper wrapper,0.11.0 不能靠普通自动升级完成迁移。先安装全局 Toolchain,再在项目里生成新的 Kotlin wrapper。
bash
kotlin update --create
后面再升级 Toolchain 版本时,才继续用 kotlin update。

全局命令
0.11.0 开始可以全局安装 kotlin CLI。官方示例里给的是 SDKMAN!:
bash
sdk install kotlintoolchain
全局命令解决的是两个小问题。一个是在项目子目录里执行命令时不用回到根目录找 ./kotlin,另一个是 kotlin init 这种和具体项目无关的命令可以直接用。
这里有个细节:全局安装不等于所有项目共用同一个 Toolchain 版本。kotlin 命令进入项目后,会查找项目里的 wrapper,并运行项目对应的版本。这个行为和 Gradle wrapper 的思路接近,团队仓库还是应该提交 wrapper,保证 clone 下来以后版本一致。
常用命令可以先记这几个:
bash
kotlin init
kotlin build
kotlin run
kotlin test
kotlin check
kotlin publish mavenCentral
其中 kotlin check 是 0.11.0 里插件扩展会用到的入口,默认会跑常规单元测试,插件也可以把自己的检查项挂进去。
发布 JVM library
0.11.0 里比较实际的一项能力是发布 JVM library。普通 Maven 仓库和 Maven Central 都支持,但目前发布能力还是 Preview,而且 KMP library 还不能完整发布给其他项目消费。
发布普通 Maven 仓库时,核心配置在 module.yaml。模块要声明为 jvm/lib,仓库要打开 publish: true,发布信息放在 settings.publishing 下。
bash
product: jvm/lib
repositories:
- id: myMavenRepo
url: https://maven.pkg.github.com/my-org/my-repo
publish: true
credentials:
file: creds.properties
usernameKey: username
passwordKey: password
settings:
publishing:
enabled: true
group: com.example
artifactId: greeter
version: 1.0.0
命令里传仓库 id:
bash
kotlin publish myMavenRepo
发布 Maven Central 时,不需要手写 repository,而是打开 mavenCentral。项目仍然要准备 Central Portal 账号、namespace、token 和 PGP signing key;Toolchain 负责生成 sources、javadoc、签名、checksum 和 deployment bundle。
bash
product: jvm/lib
description: A small JVM library
settings:
publishing:
enabled: true
group: com.example
version: 1.0.0
mavenCentral: enabled
signArtifacts: true
publishSources: true
pom:
url: https://example.com
scm: https://github.com/my-org/example.git
developers:
- name: Android Tech
licenses:
- name: MIT
url: https://opensource.org/license/mit
CI 里要传几组环境变量:
bash
KOTLIN_TOOLCHAIN_MAVEN_CENTRAL_USERNAME
KOTLIN_TOOLCHAIN_MAVEN_CENTRAL_PASSWORD
KOTLIN_TOOLCHAIN_SIGNING_KEY
KOTLIN_TOOLCHAIN_SIGNING_KEY_PASSPHRASE
最后执行:
bash
kotlin publish mavenCentral
默认发布模式是 manual。命令会上传 bundle 并等待校验,后续在 Central Portal UI 里确认发布。如果要全自动,可以配置 publishingMode: auto,但这个更适合已经跑通过的 CI。

插件扩展
0.11.0 还补了插件作者会用到的几块能力。比较容易理解的是 custom checks 和 custom commands。
custom checks 可以把插件里的任务挂到 kotlin check 下。比如有一个 lint task:
bash
# my-lint-plugin/plugin.yaml
tasks:
runLinter:
action: !kotlinJavaLint
sources: ${module.kotlinJavaSources}
checks:
- name: lint
performedBy: runLinter
这样可以直接跑:
bash
kotlin check lint
custom commands 则是把插件任务暴露成用户可调用的命令。比如生成 detekt baseline:
bash
tasks:
updateBaseline:
action: !runDetektForBaseline
sources: ${module.kotlinJavaSources}
outputFile: ${module.rootDir}/detekt/baseline.xml
commands:
- updateBaseline
调用方式是:
bash
kotlin do updateBaseline
这一块对普通业务开发者不一定马上用到,但它说明 Kotlin Toolchain 不只是包一层 CLI。后面如果团队有自己的代码生成、检查、发布格式,这类能力会决定它能不能接进统一命令里。

最后
Kotlin Toolchain 0.11.0 看三个入口:kotlin 命令、jvm/lib 发布、插件里的 checks 和 commands。
它不是 Android 主工程的替代方案,但 Amper 迁移到 Kotlin Toolchain 以后,Kotlin 项目入口正在往一个命令收拢。后面如果要试,先从新建项目或独立 JVM library 开始,风险会小很多。