16.3.3 Kotlin 2025 年 Google Summer of Code
9 分钟阅读
16.3.3 Kotlin 2025 年 Google Summer of Code
本文包含 Kotlin 2025 年 Google Summer of Code 的项目构想列表以及贡献者指南
注意: Kotlin 资源:* Kotlin GitHub 仓库 * Kotlin Slack 以及 #gsoc Slack 频道 如果你有任何问题,请通过 gsoc@kotlinfoundation.org 联系我们
Google Summer of Code(GSoC)的 Kotlin 贡献者指南
入门
- 官方 Kotlin 网站是一个很好的起点。
- 阅读官方文档,更好地理解这门语言。
- 看看 JetBrains Academy 上的 Kotlin 课程,或 Android 团队的培训选项。
- 关注 Kotlin X 或 Kotlin Bluesky 账号,了解最新新闻和进展。
- 查看 Kotlin YouTube 频道,获取教程、技巧和最新更新。
- 了解 Kotlin 开源社区:
- 浏览通用的 Kotlin 贡献指南。
- 加入 Kotlin Slack 频道,与其他开发者交流并获得帮助,解决你可能遇到的任何问题。
- 加入 #gsoc 频道,向 GSoC 团队提问并获取支持。
如何申请
- 查看项目构想,选择一个你愿意参与的项目。
- 如果你不熟悉 Kotlin,请阅读 Kotlin 网站上的入门信息。
- 参考 GSoC 贡献者指南。
- 通过 GSoC 网站申请。
- 我们建议你编写一段与所提议项目相关的可运行代码示例。你也可以向我们展示任何你特别引以为豪的代码示例。
- 说明你为什么对 Kotlin 感兴趣,以及你在 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 在 Kotlin Multiplatform 中支持 Gemini 的 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)仍然是一个挑战。本项目旨在改进 Bazel 的 KMP 支持,解决依赖解析问题,增强 rules_kotlin 与 rules_jvm_external 的兼容性,并支持跨平台构建。
主要的改进将集中在处理平台特定依赖(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 是发布面向 JVM 的库和项目时最受欢迎的 Maven 仓库之一。基于 Apache Maven 或 Gradle 的开源项目都在积极使用它,它基于 Sonatype Nexus v2,正待迁移到更新的版本。目前开源项目正在向新的 Maven Central 实例迁移,新实例的 API 实现有很大不同,需要在构建工具插件中提供专门支持。开发一个兼容新 Maven Central 发布 API 的 Gradle 插件,将有助于使用 Gradle 构建的库作者顺利适应新流程。
目前,Gradle 中有多种 Maven Central 发布插件的实现,例如 Maven Publish 插件或新的 Maven Central 发布插件,后者已经在尝试采用新的 API。在申请阶段或社区磨合阶段,潜在贡献者需要审阅这些实现,并提出更新现有插件的建议,或者决定构建一个新插件或分支。交付成果将包括现有 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 和 Kotlin Multiplatform 生态系统中的关键 Gradle 构建工具插件。欢迎贡献者根据自己的兴趣和期望的项目规模选择交付成果。
可能的交付成果包括但不限于:
- 将配置缓存报告工具集成到 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 流程(Parent POM、插件兼容性测试器、Jenkins 物料清单等)看齐,并改善使用 Gradle 开发 Jenkins 插件的开发者体验。
欢迎贡献者根据自己的兴趣和期望的项目规模选择交付成果。
可能的交付成果包括但不限于:
- 更新 Gradle JPI 插件,使其符合托管的最佳实践
- 把 Gradle JPI 插件的代码库从 Groovy 迁移到 Kotlin
- 为 Jenkins 插件实现一个新的约定插件,用 Kotlin 和 Kotlin DSL 覆盖 Jenkins 插件 Parent POM 的主要功能。这不仅包括构建插件,还包括按照 Jenkins 最佳实践进行测试和静态分析
- 在最流行的 Gradle 插件(包括 Gradle 本身)中采用更新后的插件和/或约定插件
- 将 Gradle 插件集成到插件兼容性测试器和物料清单中
- 为 Jenkins 插件记录更新后的 Gradle 开发流程
预期成果
更新后的 Gradle JPI 插件和/或新的 Jenkins 约定插件,发布到 Jenkins Update Center 和 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 Platform Gradle 插件 – Gradle 报告与并行验证 [中等,175 小时]
IntelliJ Platform Gradle 插件是 Gradle 构建系统的一个插件,可简化构建、测试、验证和发布基于 IntelliJ 的 IDE 插件所需的环境配置。该插件管理构建、测试和验证步骤,同时紧跟 IntelliJ 平台不断引入的变化。JetBrains、第三方开发者以及外部公司都在使用 IntelliJ Platform Gradle 插件,将自己的工作流与 JetBrains 工具集成。
预期成果
- 引入 Gradle 报告功能,提供详细且可配置的验证任务报告。
- 利用 Gradle Worker API 对多个 IntelliJ 平台版本并行执行
verifyPlugin任务,缩短任务执行时间。 - 探索其他 Gradle 增强功能,进一步改进插件开发工作流。
优先技能
- Kotlin
- Gradle
- IntelliJ 平台
可能的导师
Jakub Chrzanowski,JetBrains
添加更多 Kotlin OpenRewrite 配方 [中等,175 小时]
OpenRewrite 是一个强大的框架,可以以结构化的方式自动完成代码迁移和重构。虽然 OpenRewrite 对 Java 有很强的支持,但 Kotlin 生态系统可以从更全面的 OpenRewrite 配方集中受益,从而帮助开发者无缝迁移他们的代码库。
本项目旨在扩充 Kotlin OpenRewrite 配方集合,添加更多自动化转换,例如把基于 Java 的 AutoValue 类迁移为地道的 Kotlin 数据类、让 Kotlin 代码现代化以符合最佳实践,以及实现更顺畅的 Kotlin 版本间迁移。这些配方将帮助 Kotlin 开发者以最少的手工工作量维护干净、最新且地道的代码库。
预期成果
- 为 Kotlin 代码迁移开发新的 OpenRewrite 配方
优先技能
- Kotlin
- OpenRewrite 框架
- Java 到 Kotlin 的迁移策略
可能的导师
Shauvik Roy Choudhary,以及 Uber 团队
为 Bazel rules_jvm_external 添加 BOM 支持 [困难,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,让 Gradle 和第三方插件能够以统一的方式传递问题和警告。该 API 提供了清晰且可操作的错误报告,并在控制台输出、专用的 HTML 报告以及接入的可观测性工具中提供更多洞察。IntelliJ IDEA 或 Android Studio 等 IDE 也可以通过 Gradle 的 API 集成工具访问这些细节,并直接在代码编辑器中显示警告。若干核心功能和插件已经采用了 Problems API:Java 编译、依赖解析错误、弃用警告等等。我们希望 Kotlin 的代码质量插件也能采用这一 API;它将显著改善 10 万多名使用 Gradle 的 Kotlin 开发者的体验。
在本项目中,我们邀请贡献者选择若干 Kotlin 代码质量插件,例如 Ktlint、Detekt、Diktat、ArchUnit 或面向 Kotlin 的 Checkstyle,并将它们与 Problems API 集成。你也可以为使用 KotlinDSL 定义的 Gradle 构建实现类似的分析集成。
预期成果
- 在上述插件中实现 Problems API 集成
优先技能
- Kotlin
- Gradle
可能的导师
Oleg Nenashev、Balint Hegyi、Reinhold Degenfellner