Kotlin 2025 年 Google 编程之夏
本文包含 Kotlin 2025 Google Summer of Code 的项目构想列表和贡献者指南。
Kotlin Google Summer of Code (GSoC) 贡献者指南
入门
-
查看 GSoC 常见问题解答 和 项目公告。
-
熟悉 Kotlin 语言:
- 官方 Kotlin 网站 是一个很好的起点。
- 阅读官方文档以更好地理解该语言。
- 浏览 JetBrains Academy 上的 Kotlin 课程或 Android 团队的 培训选项。
- 关注 Kotlin X 或 Kotlin Bluesky 帐户,以了解最新消息和发展动态。
- 查看 Kotlin YouTube 频道 了解教程、技巧和最新更新。
-
了解 Kotlin 开源社区:
- 浏览通用的 Kotlin 贡献指南。
- 加入 Kotlin Slack 频道 与其他开发者联系,并在有任何疑问时获得帮助。
- 加入 #gsoc 频道 提出问题并获得 GSoC 团队的支持。
如何申请
- 查看项目构想并选择你想要从事的项目。
- 如果你不熟悉 Kotlin,请阅读 Kotlin 网站上的介绍性信息。
- 参考 GSoC 贡献者指南。
- 通过 GSoC 网站 申请。
- 我们建议你编写一个与拟议项目相关的工作代码示例。你也可以向我们展示你特别引以为豪的任何代码示例。
- 描述你为什么对 Kotlin 感兴趣以及你在这方面的经验。
- 如果你参与开源项目,请参考你的贡献历史。
- 如果你有 GitHub、Twitter 帐户、博客或技术或科学出版物作品集,也请参考它们。
- 披露由于其他承诺(例如考试和假期)而与 GSoC 时间表发生的任何冲突。
谢谢!我们期待阅读你的申请!
项目构想
构建服务器协议:添加 Kotlin 支持 [难度:难,350 小时]
Kotlin 团队希望扩展官方 Kotlin 支持,不仅支持 Gradle 和 Maven 构建系统, 还支持任何其他构建系统,并在 JetBrains IDE 中以最少的精力原生支持它们。 另一方面,我们也希望在非 JetBrains IDE 中提供基本的 Kotlin 支持 – 这种支持的一部分是能够从任何支持 Kotlin 的构建系统获取特定于 Kotlin 的信息。
这些要求的解决方案可能是 构建服务器协议 (BSP), 它在构建系统和 IDE 之间提供了一个抽象层。
该项目的目标是实现一个原型,该原型使用 BSP 协议从用户项目中获取 IntelliJ IDEA 所需的所有信息, 以便可以在该项目中处理 Kotlin 代码。 为了限制此原型的范围,用户项目将使用 Gradle 自动构建自身。
首选技能
- Kotlin 知识
- 了解如何编写 Gradle 插件
- 加分项: 了解如何编写 IntelliJ IDEA 的插件
可能的导师
Yahor Berdnikau, Bálint Hegyi, 和 Reinhold Degenfellner
申请人任务
-
任务 #1。 你为什么对这个项目感兴趣?
-
任务 #2。 练习任务: 创建一个 Gradle 插件,该插件公开一个特定任务。在存在 Kotlin Gradle 插件的情况下,此任务应检索所有 Kotlin 源代码的结构并将其输出。 包含测试将是一个奖励。
在 Firebase 中使用 Vertex AI 为 Gemini 在 Kotlin Multiplatform 中支持 Android 和 iOS 目标 [难度:中等,175 小时]
该项目旨在创建一个开源 Kotlin Multiplatform (KMP) 库,该库支持在 Android 和 iOS 上使用 Firebase 中的 Vertex AI 的 Gemini。 它将展示为现有服务创建 KMP 库的最佳实践, 重点是适当的生产实现(例如,适当的 API 密钥管理、用户管理的 API 密钥支持和客户端限制)。
预期成果
- 一个新的 Kotlin Multiplatform 库,支持现有的 Google 服务
- 示例代码和文档
首选技能
- Kotlin
- Kotlin Multiplatform
- 移动开发(Android 和 iOS)
可能的导师
Matt Dyor,以及 Google 团队
在 Bazel 中添加 Kotlin Multiplatform 支持 [难度:难,350 小时]
Bazel 对 Kotlin 的支持正在发展,但适当的 Kotlin Multiplatform (KMP) 集成仍然是一个挑战。
该项目旨在通过解决依赖项解析问题,增强 rules_kotlin
和 rules_jvm_external
兼容性以及启用跨平台构建来改进 Bazel 的 KMP 支持。
关键改进将侧重于处理平台特定的依赖项(expect/actual 机制)、改进 Gradle 元数据支持以及确保 Bazel 中 KMP 的更流畅的开发者体验。
预期成果
- 增强 Bazel 中 Kotlin Multiplatform 的依赖项解析
- 改进与
rules_kotlin
和rules_jvm_external
的集成 - 在 Bazel 中建立一个可用的 KMP 构建设置,以实现无缝的多平台开发
首选技能
- Kotlin Multiplatform 和 Gradle
- Bazel 构建系统
- 依赖项解析策略
可能的导师
Shauvik Roy Choudhary,以及 Uber 团队
Kotlin 语言服务器 (LSP) [难度:难,350 小时]
语言服务器协议 (LSP) 是一种广泛采用的标准,它支持跨不同编辑器和 IDE 的代码智能功能,例如自动完成、 转到定义和重构。虽然目前没有官方的 Kotlin LSP 服务器, 但社区对它的需求很大。公开维护的、社区驱动的实现可以支持广泛的用例, 包括代码迁移、AI 驱动的代码辅助以及与各种开发环境的无缝集成。
该项目旨在开发 Kotlin LSP 实现,确保与关键 LSP 功能的兼容性, 并扩大 Kotlin 在各种开发环境中的可访问性。
预期成果
开发 Kotlin LSP 实现
首选技能
- Kotlin
- 语言服务器协议 (LSP)
- IDE 的插件或扩展开发
可能的导师
Shauvik Roy Choudhary,以及 Uber 团队
带有新 API 的 Gradle 的 Maven Central 发布插件 [难度:中等,175 小时]
Maven Central 是最流行的 Maven 存储库之一,用于发布 以 JVM 为中心的库和项目。它被 Apache Maven 或基于 Gradle 的开源项目积极使用, 并且基于 Sonatype Nexus v2,等待迁移到更新的版本。开源项目正在迁移到新的 Maven Central 实例, 该实例具有非常不同的 API 实现,需要在构建工具插件中提供特殊支持。 开发一个与新的 Maven Central 发布 API 兼容的 Gradle 插件将有助于 使用 Gradle 构建的库作者能够顺利地使用新流程。
目前,Gradle 中有多个 Maven Central 发布插件的实现,例如,Maven Publish Plugin 或 New Maven Central Publishing,它已经尝试采用新的 API。 在申请或社区联系阶段,潜在的贡献者需要查看这些实现, 并建议更新现有的插件,或者决定构建新的插件或 fork。 交付物将包括现有 Maven Central 发布插件的新版本或 Gradle 的新插件。 我们预计该实现将使用 Kotlin 或 Java,并具有适当的测试覆盖率和文档。 其他交付物可能包括 Kotlin DSL 扩展,以简化插件的使用和 声明式 Gradle 扩展。
预期成果
- 更新的 Maven Central 发布插件或新插件
首选技能
- Kotlin
- Gradle
- Maven 存储库
可能的导师
Oleg Nenashev,以及 Gradle 团队
改进关键 Gradle 插件中的配置缓存和锁争用 [难度:易到难,90 小时到 350 小时]
Gradle 正在开发 隔离项目 – 一项新功能, 可以大大扩展配置缓存,以进一步提高性能,尤其是 Android Studio 和 IntelliJ IDEA 同步的性能。从开发者的体验来看,它是 Gradle 中最受期待的功能之一。
隔离项目的一个问题是 Gradle 核心中的锁争用,插件有时会妨碍并行执行。 我们希望减少锁争用,尤其是在 Java、Kotlin、Android 的关键 Gradle 构建工具插件中, 以及 Kotlin Multiplatform 生态系统。欢迎贡献者根据自己的兴趣和所需的项目规模选择交付物。
潜在的交付物包括但不限于:
- 将 配置缓存报告 工具嵌入到 Gradle Profiler 中(或“为其实现 GitHub Action”)
- 在各种项目中分析 Gradle 和一些流行的 Gradle 插件,并在 GHA 上自动化测试套件
- 确定可以减少锁争用的潜在区域和插件,无论是否使用配置缓存
- 同时,为目标插件中 配置缓存兼容性 的其他领域做出贡献
- 实施一些已发现的改进
预期成果
在 Gradle 的 Kotlin DSL 中实现可扩展性功能,并改进对常见项目集成的支持
首选技能
- Kotlin
- Gradle
- Java
- 性能分析
- 分析
可能的导师
Oleg Nenashev, Laura Kassovic
用于开发 Jenkins 插件的 Gradle 约定插件 [难度:易到难,90 小时到 350 小时]
有超过 50 个 Jenkins 插件是用 Gradle 实现的。 有一个 Gradle JPI 插件, 但它不完全符合 Jenkins 托管要求,需要更新。 在此项目构想中,目标是恢复 Jenkins 的 Gradle 开发者流程,达到与 Apache Maven 流程的功能对等(父 POM, 插件兼容性测试器, Jenkins 物料清单 等), 并改善那些使用 Gradle 开发 Jenkins 插件的开发者的体验。
欢迎贡献者根据自己的兴趣和所需的项目规模选择交付物。
潜在的交付物包括但不限于:
- 刷新 Gradle JPI 插件,使其符合托管最佳实践
- 将 Gradle JPI 插件代码库从 Groovy 迁移到 Kotlin
- 为 Jenkins 插件实现一个新的约定插件,该插件将涵盖 Jenkins 插件父 POM 的主要功能,使用 Kotlin 和 Kotlin DSL。 这不仅包括构建插件,还包括根据 Jenkins 的最佳实践进行测试和静态分析
- 在最流行的 Gradle 插件(包括 Gradle 插件本身)中采用刷新的插件和/或约定插件
- 将 Gradle 插件集成到插件兼容性测试器和物料清单中
- 记录 Jenkins 插件的更新的 Gradle 开发流程
预期成果
更新的 Gradle JPI 插件和/或 Jenkins 的新约定插件,发布在 Jenkins 更新中心和 Gradle 插件门户上
首选技能
- Kotlin DSL
- Kotlin
- Gradle
- Jenkins
- Java
可能的导师
Oleg Nenashev, Stefan Wolf
Kotlin DSL 和声明式 Gradle 文档示例测试框架 [难度:易到中等,90 小时到 175 小时]
许多项目(包括 Gradle)都有大量的 Kotlin DSL 示例和代码片段(请参阅 Gradle 文档中的示例)。 针对多个版本测试它们提出了一些挑战,因为这些片段通常为了简洁起见而表示不完整的代码。 我们希望构建一个测试框架,该框架简化了在 GitHub Actions 或 TeamCity 上的单元测试框架(Kotest 或 JUnit 5)中验证这些示例的过程。 稍后,我们将有兴趣为 声明式 Gradle 示例执行相同的操作。
预期成果
在 Gradle 的 Kotlin DSL 中实现可扩展性功能,并改进对常见项目集成的支持
首选技能
- Kotlin
- Gradle
- Java
- 静态分析
可能的导师
Oleg Nenashev, Laura Kassovic
IntelliJ 平台 Gradle 插件 – Gradle 报告和并行验证 [难度:中等,175 小时]
IntelliJ 平台 Gradle 插件 是一个用于 Gradle 构建系统的插件,它简化了配置环境以构建、测试、验证 和发布基于 IntelliJ 的 IDE 的插件的过程。该插件管理构建、测试和 验证步骤,同时跟上 IntelliJ 平台中不断引入的更改。 IntelliJ 平台 Gradle 插件被 JetBrains、第三方开发者 和外部公司使用,以将其工作流程与 JetBrains 工具集成。
预期成果
- 引入 Gradle 报告以提供详细的、可配置的验证任务报告。
- 利用 Gradle Worker API 启用针对多个 IntelliJ 平台版本的
verifyPlugin
任务的并行执行,从而减少任务执行时间。 - 探索其他 Gradle 增强功能,以进一步改进插件开发工作流程。
首选技能
- Kotlin
- Gradle
- IntelliJ 平台
可能的导师
Jakub Chrzanowski, JetBrains
添加更多 Kotlin OpenRewrite Recipes [难度:中等,175 小时]
OpenRewrite 是一个强大的框架,用于以结构化的方式自动化代码迁移和重构。 虽然 OpenRewrite 对 Java 有很强的支持,但 Kotlin 生态系统将受益于更全面的 OpenRewrite recipes 集合,以帮助开发者无缝地迁移其代码库。
该项目旨在通过添加更多 自动化转换来扩展 Kotlin OpenRewrite recipe 集合,例如将基于 Java 的 AutoValue 类迁移到惯用的 Kotlin 数据类,使 Kotlin 代码现代化以遵循最佳实践,并启用更 跨 Kotlin 版本的无缝迁移。这些 recipes 将帮助 Kotlin 开发者 以最少的手动工作量维护干净、最新和惯用的代码库。
预期成果
- 开发用于 Kotlin 代码迁移的新 OpenRewrite recipes
首选技能
- Kotlin
- OpenRewrite 框架
- Java 到 Kotlin 的迁移策略
可能的导师
Shauvik Roy Choudhary,以及 Uber 团队
将 BOM 支持添加到 Bazel rules_jvm_external
[难度:难,350 小时]
Bazel 的 rules_jvm_external
提供了一种结构化的方式来声明外部 Java 依赖项,
但它目前缺乏对物料清单 (BOM) 文件的适当支持。
BOM 文件在 Maven 和 Gradle 中被广泛使用,以一致的方式管理依赖项,
而无需开发者指定各个版本。
该项目旨在通过添加 BOM 支持来增强 rules_jvm_external
,从而允许开发者在 Bazel 中使用基于 BOM 的依赖项解析。
该项目可能涉及为现有的开源工作做出贡献,或者直接在 rules_jvm_external
中实现 BOM 支持,
确保与广泛使用的依赖项管理方法兼容。
预期成果
- 在 Bazel
rules_jvm_external
中实现 BOM 支持 - 改进 Bazel 用户的依赖项解析和可用性
- 在 Bazel 中使用 BOM 支持的文档和示例
首选技能
- Starlark(Bazel 的脚本语言)
- Bazel 构建系统
- 依赖项解析策略
可能的导师
Shauvik Roy Choudhary,以及 Uber 团队
适用于 Kotlin 的 Gradle 代码质量插件的清晰且可操作的报告 [难度:易到中等,90 小时到 175 小时]
Gradle 最近引入了一个新的 Problems API, 该 API 允许 Gradle 和第三方插件以统一的方式传播问题和警告。 此 API 提供清晰且可操作的错误报告,并提供对控制台输出、专用 HTML 报告和 连接的可观察性工具的更多见解。IntelliJ IDEA 或 Android Studio 等 IDE 也可以通过 Gradle 的 API 集成工具访问详细信息, 并且可以在代码编辑器中显示警告。一些核心功能和插件已经采用了 Problems API:Java 编译、 依赖项解析错误、弃用警告等。我们希望适用于 Kotlin 的代码质量插件也采用此 API;它将显著 改善 100,000 多名使用 Gradle 的 Kotlin 开发者 的开发者体验。
在此项目中,我们邀请贡献者选择一些 Kotlin 代码质量插件,例如 Ktlint、Detekt、Diktat、ArchUnit 或 Checkstyle for Kotlin,并将它们与 Problems API 集成。你还可以致力于为使用 KotlinDSL 定义的 Gradle 构建集成类似的分析。
预期成果
- 在提到的插件中实现 Problems API 集成
首选技能
- Kotlin
- Gradle
可能的导师
Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner