---
title: "上手Kotlin 2.5.0-Beta2：升级版本、打开companion块和完整value class，KMP库试用.kar格式 - Angryecho"
description: "Kotlin 2.5.0-Beta2于10月21日发布，是2.5.0正式版之前的预览版本。[1] 这一版把名称解构等几项特性转为稳定，还加入了companion扩展和companion块、完整value class等实验特性，Swift export进入Beta，KMP库多了一种更省空间的发布格式。["
canonical_url: "https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBlFfhc4F629HnDOCL"
meta:
  "og:description": "Kotlin 2.5.0-Beta2于10月21日发布，是2.5.0正式版之前的预览版本。[1] 这一版把名称解构等几项特性转为稳定，还加入了companion扩展和companion块、完整value class等实验特性，Swift export进入Beta，KMP库多了一种更省空间的发布格式。["
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBlFfhc4F629HnDOCL%2Crevision_~MjAyNi0xMS0wMVQwMjo1NTo1Ny40MDAxNzda%2Cp_Ii9jL0tvdGxpbnpob25nX3dlbl9ib19rZS9wL1AyVEJCbEZmaGM0RjYyOUhuRE9DTCI%2Cs_Mkv3zyaRzm-1aE3m.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "上手Kotlin 2.5.0-Beta2：升级版本、打开companion块和完整value class，KMP库试用.kar格式"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **上手Kotlin 2.5.0-Beta2：升级版本、打开companion块和完整value class，KMP库试用.kar格式**

Kotlin 2.5.0-Beta2于10月21日发布，是2.5.0正式版之前的预览版本。\[1] 这一版把名称解构等几项特性转为稳定，还加入了companion扩展和companion块、完整value class等实验特性，Swift export进入Beta，KMP库多了一种更省空间的发布格式。\[1] 下面按官方文档整理在自己项目里试用的步骤，适合想提前评估新特性的Kotlin开发者；Beta版不建议直接用于生产。

## 准备工作

- 把IntelliJ IDEA或Android Studio更新到最新版本，官方说明最新版Kotlin已包含在其中。\[1]
- 运行编译器的JDK升级到17或以上。2.5.0-Beta2开始，用低于JDK 17的环境运行编译器会直接报错。\[1]
- 建议新建分支或单独的试验项目，方便回退。

## 操作步骤

### 1、把Kotlin版本改成2.5.0-Beta2

在构建脚本里把Kotlin版本改为`2.5.0-Beta2`。\[1] 以Gradle Kotlin DSL的JVM项目为例：

```kotlin
plugins {
    kotlin("jvm") version "2.5.0-Beta2"
}
```

为什么：新特性和编译器行为都绑定在这个版本上。确认成功：Gradle同步和编译通过，没有出现JDK版本相关的报错。如果暂时无法升级JDK，官方提供了`-Xallow-pre-17-runtime-jdk`临时跳过，但会在2.5.20或2.6.0移除。\[1]

### 2、打开companion扩展和companion块

这项特性让你不用先写`companion object`，也能声明通过类型名访问的函数和属性。它是实验特性，需要加编译选项：\[1]

```kotlin
kotlin {
    compilerOptions {
        freeCompilerArgs.add("-Xcompanion-blocks-and-extensions")
    }
}
```

然后用官方示例验证：\[1]

```kotlin
companion val Vector.UnitX get() = Vector(1.0, 0.0)

data class Vector(val x: Double, val y: Double) {
    companion {
        val Zero: Vector get() = Vector(0.0, 0.0)
    }
}

fun main() {
    println(Vector.UnitX) // Vector(x=1.0, y=0.0)
    println(Vector.Zero)  // Vector(x=0.0, y=0.0)
}
```

为什么：在JVM上，这些声明会直接生成静态成员，不用再加`@JvmStatic`。\[1] 确认成功：程序输出和注释里的结果一致。

### 3、试用完整value class

以前的value class只能包一个值。完整value class允许多个属性，实例只看值、不看引用身份。同样需要编译选项`-Xfull-value-classes`，写法和上一步相同。\[1]

```kotlin
value class Complex(val real: Double, val imaginary: Double)
```

为什么：编译器会像data class一样自动生成`equals()`、`hashCode()`、`toString()`，但没有`componentN()`和`copy()`。\[1] 确认成功：打印一个`Complex`实例能看到自动生成的`toString()`结果，两个属性值相同的实例用`==`比较为`true`。

### 4、（KMP库作者）试用.kar发布格式

新格式把除JVM和Android外的平台产物打成一个`.kar`归档（ZIP再经XZ压缩），用来应对Maven Central的发布体积限制。\[1] 在单个模块启用：

```kotlin
kotlin {
    publishing {
        publicationFormat.set(KotlinPublicationFormat.KOTLIN_ARCHIVE)
    }
}
```

或在`gradle.properties`里对全项目启用：`kotlin.publicationFormat=KOTLIN_ARCHIVE`。\[1] 为什么：官方举例，cryptography-kotlin库的发布产物从7539个文件、91MB降到1036个文件、23MB。\[1] 确认成功：本地发布后，产物目录里出现`.kar`文件、文件数明显减少。这一项只影响库作者，应用开发者不需要改。

## 注意事项

- 以后普通 `value class`将不再自动视为inline。2.5.20会对没有标注的单字段value class给出警告，现有代码可以提前用 `@JvmInline`或 `inline`修饰符标明。\[1]
- Swift export进入Beta，入口从 `swiftExport {}`改为 `export { swift {} }`， `flattenPackage`改名为 `rootPackage`，iOS项目升级时要同步改构建脚本。\[1]
- 类型推断做了性能优化，个别复杂泛型代码可能推断出不同类型或选中不同重载，升级后要跑一遍测试。\[1]
- 实验特性的语法和行为在正式版前仍可能变化，遇到问题可以到YouTrack反馈。\[1]

> 说明：以上步骤依据Kotlin官方“What's new in Kotlin 2.5.0-Beta2”文档整理，于2026年10月25日核实。

## 来源

> \[1] [What's new in Kotlin 2.5.0-Beta2（Kotlin官方文档）](https://kotlinlang.org/docs/whatsnew-eap.html)，2026年10月21日发布。

#Kotlin #Kotlin2.5 #KotlinMultiplatform #valueclass #SwiftExport #Gradle #编程教程

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBlFfhc4F629HnDOCL#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-11-01T02:55:57.400Z","datePublished":"2026-10-21T04:00:00.000Z","description":"Kotlin 2.5.0-Beta2于10月21日发布，是2.5.0正式版之前的预览版本。[1] 这一版把名称解构等几项特性转为稳定，还加入了companion扩展和companion块、完整value class等实验特性，Swift export进入Beta，KMP库多了一种更省空间的发布格式。[","headline":"上手Kotlin 2.5.0-Beta2：升级版本、打开companion块和完整value class，KMP库试用.kar格式","isPartOf":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke","mainEntityOfPage":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBlFfhc4F629HnDOCL","text":"Kotlin 2.5.0-Beta2于10月21日发布，是2.5.0正式版之前的预览版本。[1] 这一版把名称解构等几项特性转为稳定，还加入了companion扩展和companion块、完整value class等实验特性，Swift export进入Beta，KMP库多了一种更省空间的发布格式。[1] 下面按官方文档整理在自己项目里试用的步骤，适合想提前评估新特性的Kotlin开发者；Beta版不建议直接用于生产。\n\n准备工作\n\n\n\n\n\n把IntelliJ IDEA或Android Studio更新到最新版本，官方说明最新版Kotlin已包含在其中。[1]\n\n\n\n运行编译器的JDK升级到17或以上。2.5.0-Beta2开始，用低于JDK 17的环境运行编译器会直接报错。[1]\n\n\n\n建议新建分支或单独的试验项目，方便回退。\n\n操作步骤\n\n1、把Kotlin版本改成2.5.0-Beta2\n\n在构建脚本里把Kotlin版本改为2.5.0-Beta2。[1] 以Gradle Kotlin DSL的JVM项目为例：\n\nplugins {\n    kotlin(\"jvm\") version \"2.5.0-Beta2\"\n}\n\n为什么：新特性和编译器行为都绑定在这个版本上。确认成功：Gradle同步和编译通过，没有出现JDK版本相关的报错。如果暂时无法升级JDK，官方提供了-Xallow-pre-17-runtime-jdk临时跳过，但会在2.5.20或2.6.0移除。[1]\n\n2、打开companion扩展和companion块\n\n这项特性让你不用先写companion object，也能声明通过类型名访问的函数和属性。它是实验特性，需要加编译选项：[1]\n\nkotlin {\n    compilerOptions {\n        freeCompilerArgs.add(\"-Xcompanion-blocks-and-extensions\")\n    }\n}\n\n然后用官方示例验证：[1]\n\ncompanion val Vector.UnitX get() = Vector(1.0, 0.0)\n\ndata class Vector(val x: Double, val y: Double) {\n    companion {\n        val Zero: Vector get() = Vector(0.0, 0.0)\n    }\n}\n\nfun main() {\n    println(Vector.UnitX) // Vector(x=1.0, y=0.0)\n    println(Vector.Zero)  // Vector(x=0.0, y=0.0)\n}\n\n为什么：在JVM上，这些声明会直接生成静态成员，不用再加@JvmStatic。[1] 确认成功：程序输出和注释里的结果一致。\n\n3、试用完整value class\n\n以前的value class只能包一个值。完整value class允许多个属性，实例只看值、不看引用身份。同样需要编译选项-Xfull-value-classes，写法和上一步相同。[1]\n\nvalue class Complex(val real: Double, val imaginary: Double)\n\n为什么：编译器会像data class一样自动生成equals()、hashCode()、toString()，但没有componentN()和copy()。[1] 确认成功：打印一个Complex实例能看到自动生成的toString()结果，两个属性值相同的实例用==比较为true。\n\n4、（KMP库作者）试用.kar发布格式\n\n新格式把除JVM和Android外的平台产物打成一个.kar归档（ZIP再经XZ压缩），用来应对Maven Central的发布体积限制。[1] 在单个模块启用：\n\nkotlin {\n    publishing {\n        publicationFormat.set(KotlinPublicationFormat.KOTLIN_ARCHIVE)\n    }\n}\n\n或在gradle.properties里对全项目启用：kotlin.publicationFormat=KOTLIN_ARCHIVE。[1] 为什么：官方举例，cryptography-kotlin库的发布产物从7539个文件、91MB降到1036个文件、23MB。[1] 确认成功：本地发布后，产物目录里出现.kar文件、文件数明显减少。这一项只影响库作者，应用开发者不需要改。\n\n注意事项\n\n\n\n\n\n以后普通value class将不再自动视为inline。2.5.20会对没有标注的单字段value class给出警告，现有代码可以提前用@JvmInline或inline修饰符标明。[1]\n\n\n\nSwift export进入Beta，入口从swiftExport {}改为export { swift {} }，flattenPackage改名为rootPackage，iOS项目升级时要同步改构建脚本。[1]\n\n\n\n类型推断做了性能优化，个别复杂泛型代码可能推断出不同类型或选中不同重载，升级后要跑一遍测试。[1]\n\n\n\n实验特性的语法和行为在正式版前仍可能变化，遇到问题可以到YouTrack反馈。[1]\n\n\n\n说明：以上步骤依据Kotlin官方“What's new in Kotlin 2.5.0-Beta2”文档整理，于2026年10月25日核实。\n\n来源\n\n\n\n[1] What's new in Kotlin 2.5.0-Beta2（Kotlin官方文档），2026年10月21日发布。\n\n#Kotlin #Kotlin2.5 #KotlinMultiplatform #valueclass #SwiftExport #Gradle #编程教程","url":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBlFfhc4F629HnDOCL","author":{"@type":"Person","name":"webdood90","url":"https://www.angryecho.com/u/H8Swebdood90"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
