Kotlin Toolchain 0.11 发布:Amper 正式更名,统一 kotlin 命令

6 月 24 日,JetBrains 发布了 Kotlin Toolchain 0.11.0

以后创建、构建、运行、测试、发布 Kotlin 项目,入口会逐步收敛到一个 kotlin 命令。

从 Amper 到 Toolchain

Amper 之前做的是声明式构建体验,项目里用 module.yamlproject.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 发布、插件里的 checkscommands

它不是 Android 主工程的替代方案,但 Amper 迁移到 Kotlin Toolchain 以后,Kotlin 项目入口正在往一个命令收拢。后面如果要试,先从新建项目或独立 JVM library 开始,风险会小很多。

#Android #Kotlin #KotlinToolchain

相关推荐
雨白2 小时前
C语言基础快速入门与指针初探
android
Exploring4 小时前
避坑指南:升级 AGP 8.0+ 导致第三方 SDK 编译崩溃的完美解决方案
android
石山岭1 天前
自己动手写了一个 Android 虚拟定位 App:GPSSimulate 技术实
android·前端
杉氧1 天前
副作用 (Side Effects) 全攻略:如何像大师一样掌控 Composable 的生命周期?
android·架构·android jetpack
唐青枫1 天前
别再把 inline 当性能开关:Kotlin 内联、noinline、crossinline 与 reified 实战详解
kotlin
Kapaseker1 天前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin
黄林晴1 天前
AndroidX 官宣信号:Compose版WebView要来了!
kotlin
三少爷的鞋1 天前
Android 现代架构不需要事件总线进阶篇
android
杉氧2 天前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack