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

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work1 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work1 天前
ch21 签名、校验与发版
kotlin
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui