12.4.10 从命令行运行 KSP

原文链接: https://kotlinlang.org/docs/ksp-command-line.html

12.4.10 从命令行运行 KSP

大多数项目通过 Gradle 插件使用 KSP,它会在编译期间自动运行 KSP。你也可以从命令行使用 KSP,但通常只在与其他构建系统集成、开发处理器、测试或调试时才会这么做。

由于 KSP 是一个 JVM 应用,请使用 java 命令从命令行启动 KSP。提供 classpath 和任何必要的参数:

1
java -cp <classpath> <mainclass> <options> <processor>

| 参数 | 说明 |

| <classpath> | KSP 运行时 JAR 及其依赖的路径。 | | <mainclass> | 平台特定的 KSP 入口点之一。 | | <options> | KSP 的命令行选项。 | | <processor> | 处理器 JAR 的路径。 |

Classpath

与 Gradle 插件不同,java 命令不会自动解析依赖。你必须在 classpath 上提供 KSP 运行时 JAR 及其依赖。

从 KSP 发行页面下载 artifacts.zip。该归档包含所需的 KSP JAR 文件:

  • symbol-processing-aa-2.3.10.jar

  • symbol-processing-common-deps-2.3.10.jar

  • symbol-processing-api-2.3.10.jar

你还必须包含来自 Maven 仓库的以下运行时依赖:

主类

由于 KSP 是 JVM 应用,你必须指定要启动的主类。KSP 为每个受支持的平台提供了不同的入口点:

| 入口点 | 平台 |

| KSPJvmMain | Kotlin/JVM 与 Android | | KSPJsMain | Kotlin/JS | | KSPNativeMain | Kotlin/Native 目标,例如 iOS、macOS、Linux 和 Windows。 | | KSPCommonMain | Kotlin Multiplatform 项目中的公共编译。 |

用 java 启动 KSP 时,请指定完全限定的类名。例如:

1
java -cp <classpath> com.google.devtools.ksp.cmdline.KSPJvmMain <options> <processor>

下面的例子使用 KSPJvmMain 为 JVM 目标运行 KSP:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
java -cp \
symbol-processing-aa-2.3.10.jar:symbol-processing-common-deps-2.3.10.jar:symbol-processing-api-2.3.10.jar:kotlin-stdlib-2.3.20.jar:kotlinx-coroutines-core-jvm-1.10.2.jar \
com.google.devtools.ksp.cmdline.KSPJvmMain \
-language-version=2.0 \
-api-version=2.0 \
-jvm-target=11 \
-module-name=main \
-source-roots=project_dir/src/kotlin/main \
-project-base-dir=project_dir/ \
-output-base-dir=project_dir/build/ \
-caches-dir=project_dir/build/caches/ \
-class-output-dir=project_dir/build/out/main/classes \
-kotlin-output-dir=project_dir/build/out/main/kotlin/ \
-java-output-dir=project_dir/build/out/main/java/ \
-resource-output-dir=project_dir/build/out/main/res/ \
path/to/processor.jar

选项

从命令行运行时,KSP 需要以下选项:

| 选项 | 说明 |

| -language-version=<version> | 项目中使用的 Kotlin 语言版本。 | | -api-version=<version> | Kotlin API 版本。 | | -jvm-target=<version> | 目标 JVM 版本。 | | -module-name=<name> | 模块名称。 | | -source-roots=<paths> | 源根目录。多个目录请使用以冒号分隔的列表。 | | -project-base-dir=<path> | 项目根目录。 | | -output-base-dir=<path> | KSP 输出的基础目录。 | | -caches-dir=<path> | KSP 缓存目录。 | | -java-output-dir=<path> | 生成的 Java 文件目录。 | | -class-output-dir=<path> | 生成的 class 文件目录。 | | -kotlin-output-dir=<path> | 生成的 Kotlin 文件目录。 | | -resource-output-dir=<path> | 生成的资源文件目录。 | | <processor> | 处理器 classpath。 |

其他有用的选项

  • -libraries=<path>:用于解析源文件所引用依赖的 classpath。通常是该模块的编译 classpath。

  • -jdk-home=<path>:JDK 主目录。当处理器解析 Java 符号并需要访问 Java 标准库时使用。

  • -friends=<path>:当前模块的 friend 模块的 classpath。这通常是该模块的 friend classpath。更多信息请参阅 Friend 模块。

提示: KSP 还支持 -Dksp.logging JVM 系统属性,用于设置日志级别。有效值为 error、warn 或 warning、info 和 debug。默认值是 warn。KSP 会把不支持的值视为 warn。

要查看完整的选项列表,请运行以下命令:

1
java -cp <classpath> <mainclass> -h