Kotlin 2025 Google 编程之夏 (GSoC
[//]: # (title: Kotlin 2025 Google 编程之夏 (GSoC))
本文包含了 Kotlin 2025 Google 编程之夏的项目思路列表,以及贡献者指南。
Kotlin 资源:
- Kotlin GitHub 仓库
- Kotlin Slack 和 #gsoc Slack 频道
如果您有任何疑问,请通过 [email protected] 联系我们
Kotlin Google 编程之夏 (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 时间线产生的任何冲突。
谢谢!我们期待阅读您的申请!
项目思路
构建服务器协议 (BSP):添加 Kotlin 支持 [困难,350 小时]
Kotlin 团队不仅希望为 Gradle 和 Maven 构建系统扩展官方 Kotlin 支持,还希望支持任何其他构建系统,并以最小的努力在 JetBrains IDE 中原生支持它们。另一方面,我们也希望在非 JetBrains IDE 中提供基础的 Kotlin 支持——这种支持的一部分是能够从任何支持 Kotlin 的构建系统中获取 Kotlin 特有的信息。
这些需求的解决方案可以是 Build Server Protocol (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 密钥以及客户端限流)。
预期成果
- 一个支持现有 Google 服务的全新 Kotlin Multiplatform 库
- 示例代码和文档
首选技能
- 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 插件或 New Maven Central Publishing,后者已经尝试采用新 API。在申请或社区交流期阶段,潜在的贡献者需要审查这些实现,并建议更新现有插件,或决定构建一个新插件或进行复刻。交付成果将包括现有 Maven Central 发布插件的新版本或一个新的 Gradle 插件。我们预计该实现将使用 Kotlin 或 Java 编写,并具有完善的测试覆盖率和文档。其他交付成果可能包括用于简化插件使用的 Kotlin DSL 扩展和 声明式 Gradle 扩展。
预期成果
- 更新的 Maven Central 发布插件或一个新插件
首选技能
- Kotlin
- Gradle
- Maven 仓库
可能的导师
Oleg Nenashev, 以及 Gradle 团队
优化关键 Gradle 插件中的配置缓存与锁争用 [简单到困难,90 小时到 350 小时]
Gradle 正在开发 Isolated Projects——这是一项新功能,极大地扩展了配置缓存以进一步提高性能,特别是 Android Studio 和 IntelliJ IDEA 的同步性能。从开发者体验的角度来看,这是 Gradle 中最受期待的功能之一。
Isolated Projects 面临的问题之一是 Gradle 核心中的锁争用,插件有时会阻碍并行执行。我们希望减少锁争用,特别是在 Java、Kotlin、Android 和 Kotlin Multiplatform 生态系统的关键 Gradle 构建工具插件中。欢迎贡献者根据自己的兴趣和预期的项目规模选择交付成果。
潜在的交付成果包括但不限于:
- 将 Configuration Cache Report 工具嵌入到 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 物料清单 (BOM) 等)的功能对等,并为那些使用 Gradle 开发 Jenkins 插件的开发者改进开发者体验。
欢迎贡献者根据自己的兴趣和预期的项目规模选择交付成果。
潜在的交付成果包括但不限于:
- 更新 Gradle JPI 插件并使其符合托管最佳做法
- 将 Gradle JPI 插件代码库从 Groovy 迁移到 Kotlin
- 为 Jenkins 插件实现一个新的约定插件,该插件将涵盖 Jenkins 插件 Parent 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 Platform Gradle 插件 – Gradle 报告与并行验证 [中等,175 小时]
IntelliJ Platform Gradle 插件是 Gradle 构建系统的一个插件,它简化了为 IntelliJ-based IDE 构建、测试、验证和发布插件的环境配置。该插件管理构建、测试和验证步骤,同时紧跟 IntelliJ Platform 中引入的不断变化。JetBrains、第三方开发者和外部公司都使用 IntelliJ Platform Gradle 插件将他们的工作流程与 JetBrains 工具集成。
预期成果
- 引入 Gradle 报告,以提供详细、可配置的验证任务报告。
- 利用 Gradle Worker API 实现
verifyPlugin任务针对多个 IntelliJ Platform 版本的并行执行,从而缩短任务执行时间。 - 探索其他的 Gradle 增强功能,以进一步改进插件开发工作流程。
首选技能
- Kotlin
- Gradle
- IntelliJ Platform
可能的导师
Jakub Chrzanowski, JetBrains
添加更多 Kotlin OpenRewrite 方案 (Recipes) [中等,175 小时]
OpenRewrite 是一个以结构化方式自动执行代码迁移和重构的强大框架。虽然 OpenRewrite 对 Java 有很强的支持,但 Kotlin 生态系统将受益于一套更全面的 OpenRewrite 方案,以帮助开发者无缝迁移其代码库。
该项目旨在通过添加更多自动转换来扩展 Kotlin OpenRewrite 方案集合,例如将基于 Java 的 AutoValue 类迁移到惯用的 Kotlin 数据类,使 Kotlin 代码现代化以遵循最佳做法,并实现跨 Kotlin 版本的更无缝迁移。这些方案将帮助 Kotlin 开发者以最少的人工工作量维护干净、最新且符合惯用法代码库。
预期成果
- 为 Kotlin 代码迁移开发新的 OpenRewrite 方案 (Recipes)
首选技能
- 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;这将显著改善使用 Gradle 的 100,000 多名 Kotlin 开发者的开发者体验。
在本项目中,我们邀请贡献者选择若干 Kotlin 代码质量插件,例如用于 Kotlin 的 Ktlint、Detekt、Diktat、ArchUnit 或 Checkstyle,并将其与 Problems API 集成。您还可以致力于为使用 Kotlin DSL 定义的 Gradle 构建集成类似的分析。
预期成果
- 在上述插件中实现 Problems API 集成
首选技能
- Kotlin
- Gradle
可能的导师
Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner
