New Products

Amper – 提升构建工具用户体验 

Read this post in other languages:

Kotlin 的采用者多次表示,他们发现构建系统的处理存在挑战。 虽然许多项目使用向导来配置环境,使开发者可以开始使用,但这也需要维护。 新的模块、平台、依赖项和其他更改通常会导致开发者花费更多时间纠结于构建系统和 IDE,而不是真正专注于工作。 随着 Kotlin 成为真正的多平台语言,对于 JVM 生态系统的新手来说,这一点更加重要。

一段时间以来,我们在 JetBrains 内部进行了一系列实验,试图了解如何为开发者提供更好的体验 – 不仅是从定义项目的角度,还要提供更好的工具支持。 这些工作与我们正在开展的有关 Kotlin Multiplatform其他举措同步。

今天,我们很高兴能够公开分享这样一个项目:Amper。 不过,请注意,它仍处于实验阶段,我们开放它的主要目标是验证想法和获得反馈。

什么是 Amper?

Amper 是一个项目配置工具。 它的目标是改善项目配置的用户体验和可工具性,即 IDE 内部的支持,同时提供流畅的开箱即用体验。 

我们目前正在研究许多方面,包括用于构建、打包、发布等目的的项目配置。 不过,在当前阶段,重点主要是针对构建配置项目。

虽然当前用例是 Kotlin 和 Kotlin Multiplatform,但 Amper 也支持 Java 和 Swift(作为多平台的要求)。 不过,相同的配置方式将来也可以用于其他语言和技术栈。 

Amper 作为 Gradle 插件实现,并使用 YAML 作为其项目配置格式。 当前目标是验证用户体验,因此我们选择在 Gradle 这样经过充分测试的构建工具上进行构建,并在它上面提供配置层。

关于使用 YAML,有些人可能会想,为什么不选择 Kotlin? 虽然关于这种标记语言的决定尚未最终落实,但我们确实希望采用声明式方式。 我们相信,这不仅可以简化配置,减少出错的可能性,还将帮助我们提供更好的工具。 同样,为了与您分享这个实验并验证背后的想法,我们采取了最简单的方式。 我们最终是否会使用 Kotlin 的限制性子集作为前端语言还有待决定。 目前,我们的重点是验证想法。 

显示代码!

让我们使用一个非常基本的 JVM“Hello, World!”项目,这个项目在 IntelliJ IDEA 2023.3 中具有以下目录结构:

main.ktMyTest.kt 文件只是常规的 Kotlin 文件,没有特别之处。 有趣的部分是 module.yaml,它是 Amper 清单文件。 对于上述项目结构,它为:

# Produce a JVM application 
product: jvm/app

就是这样。 Kotlin 和 Java 工具链、测试框架和其他必要功能均经过配置,开箱即用。 您可以构建它,运行它,编写和运行测试等。 有关更多详细信息,请查看完整示例

现在,我们来看一个包含 Android、iOS 和桌面 JVM 应用的 Compose Multiplatform 项目,这个项目在 Fleet 中具有以下项目结构:

注意 src/ 文件夹如何同时包含 Kotlin 和 Swift 代码。 当然,也可以是 Kotlin 和 Java。

另一个需要强调的方面是共享模块,其中包含 src 文件夹中的通用代码以及针对特定平台的代码文件夹 src@iossrc@android(详细了解项目布局)。

ios-app/module.yaml 清单文件如下所示:

# Produce an iOS application
product: ios/app

# Depend on the shared library module: 
dependencies:
  - ../shared

settings:
  # Enable Compose Multiplatform framework
  compose: enabled

这非常直观:它定义了一个依赖于共享模块的 iOS 应用程序,并启用了 Compose Multiplatform 框架。 更有趣的示例是 shared/module.yaml

# Produce a shared library for the JVM, Android, and iOS platforms:
product:
  type: lib
  platforms: [jvm, android, iosArm64, iosSimulatorArm64, iosX64]

# Shared Compose dependencies:
dependencies:
  - org.jetbrains.compose.foundation:foundation:1.5.0-rc01: exported
  - org.jetbrains.compose.material3:material3:1.5.0-rc01: exported

# Android-only dependencies  
dependencies@android:
  # integration compose with activities
  - androidx.activity:activity-compose:1.7.2: exported
  - androidx.appcompat:appcompat:1.6.1: exported

# iOS-only dependencies with a dependency on a CocoaPod
#   note that CocoaPods dependencies are not yet implemented in the prototype
dependencies@ios:
  - pod: 'FirebaseCore'
    version: '~> 6.6'

settings:
  # Enable Kotlin serialization
  kotlin:
    serialization: json
  
  # Enable Compose Multiplatform framework
  compose: enabled

有几点值得一提。 首先,注意带有 @ 限定符的针对特定平台的 dependencies: 部分。 平台限定符既可以在清单中使用,也可以在文件布局中使用。 限定符组织特定平台的代码、依赖项和设置。
其次,dependencies: 部分不仅允许 Kotlin 和 Maven 依赖项,还可能允许针对特定平台的软件包管理器,例如 CocoaPods、Swift Package Manager,以及其他基于我们所收到反馈的软件包管理器。

当然,这些示例仅展示了有限的 Amper 功能。 查看 GitHub 上的项目以及文档教程示例项目,更深入地了解 Amper 的设计和功能。

目前支持什么

Amper 目前支持创建以 JVM、Android、iOS、macOS 和 Linux 平台为目标的应用程序。 您可以基于 Kotlin(单平台和多平台)和 Java 创建应用程序。

鉴于 Amper 使用 Gradle 作为后端,对自定义任务的支持、将库发布到 Maven 的功能、CocoaPods 支持以及打包桌面应用的功能都通过直接配置 Gradle 构建文件来提供。

如何试用 

可以通过多种方式试用 Amper。

  • IntelliJ IDEA 2023.3 中,从内部版本号 233.11799 开始,适用于 JVM 和 Android 项目。
  • Fleet 中,从内部版本号 1.26.104 开始,适用于 JVM、Android 和 Kotlin Multiplatform 项目。
  • 使用 Gradle 从 CLI 或 CI/CD 构建 Amper 项目。

查看设置说明

我们还准备了一些示例以及教程。 此外,您还可以找到涵盖 Amper 不同方面的更详细文档

我们需要您的反馈

项目目前迫切需要您的反馈。 我们希望您进行尝试,并告诉我们它对于定义项目是否更加简单,或者您需要它涵盖哪些用例。 我们期待您的任何反馈。 请随时使用问题跟踪器提交建议和想法,在这篇文章下方发表评论,或者加入我们的公共 Slack 频道

写在最后

我们在下面准备了常见问题解答,用以回答您可能遇到的一些问题。 不过,我们还想明确说明几点。

首先,我们完全致力于在 IntelliJ IDEA 和 Fleet 中支持 Maven 和 Gradle 等技术。 项目不会改变我们对这些技术的承诺,我们将继续在这方面与合作伙伴密切合作。

其次,在现阶段,Amper 并不是一个独立构建工具。 虽然我们对如何推动产品向前发展有很多想法,但在进一步开发 Amper 之前,我们还需要验证目前的工作。 

希望常见问题解答能够解决您遇到的其他问题。 如果不能,请随时在评论中提出问题,我们将尽力回答。

本博文英文原作者:

Sue

Anton Makeev

image description

Discover more