把 gradle build script 改成 KTS 之後,我们可以先确认一下现有的 project gradle 的版本,最好是要有 gradle 7 以上的版本。在 project 根目录的地方找到 gradle/wrapper/gradle-wrapper.properties
里面的 distributionUrl
确认版本号。
接着,到 :annotation
的 module 底下的 build.gradle.kts
加入 JVM plugin :
plugins {
kotlin("jvm")
// 略
}
:processor
的 module 也要加 JVM plugin 和 KSP 的 dependency :
plugins {
kotlin("jvm")
// 略
}
dependencies {
implementation("com.google.devtools.ksp:symbol-processing-api:1.5.30-1.0.0")
// 略
}
加完了 plugin 和 dependency 就要在使用 annotation 和 annotation processor 的地方,加上 KSP 的 plugin 和 dependency ,要加的 module 应该有 :processorTest
,如果你有其他地方也有做测试或是用到 processor 都要加。
plugins {
id("com.google.devtools.ksp") version "1.5.30-1.0.0"
// 略
}
dependencies {
ksp(project(":processor"))
// 略
}
到 settings.gradle.kts
那边,加上 KSP plugin management 的宣告和指定 project 要拉的 repository 。
pluginManagement {
plugins {
id("com.google.devtools.ksp") version "1.5.30-1.0.0"
kotlin("jvm") version "1.5.30"
}
repositories {
gradlePluginPortal()
google()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
include(":kotlin", ":testCommon", ":processorTest", ":processor", ":annotation", ":android", ":app")
rootProject.name = "KtRssReader"
如果你有决心要把 KAPT 都改掉的话,要把 KAPT 的 dependencies 都删乾净。都改完了之後,记得要先 sync 一次 gradle 的 build !
在 :processor
module 底下建立新的 processor
class KspProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger,
private val options: Map<String, String>
): SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
logger.info("[testksp]")
val symbols = resolver
.getSymbolsWithAnnotation("tw.ktrssreader.annotation.RssTag")
.filterIsInstance<KSClassDeclaration>()
symbols.forEach { logger.info("[testksp] ${it.simpleName.getShortName()}") }
return emptyList()
}
}
我们先把有标注 @RssTag
的 class 名称 log 出来。
然後在同一个 module 底下建立一个 processor provider
class KspProcessorProvider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return KspProcessor(
codeGenerator = environment.codeGenerator,
logger = environment.logger,
options = environment.options
)
}
}
最後一个步骤,要在 processor/src/main/resources/META_INF/servies
底下增加一个名为 com.google.devtools.ksp.processing.SymbolProcessorProvider
的档案 (路径跟之前使用的 AutoService 同路径),档案内容如下:
com.google.devtools.ksp.processing.SymbolProcessorProvider
上述步骤都完成之後,就可以 rebuild 一次 project 看看有什麽效果罗!如果没有意外应该可以看到 IDE build output 的 log 有我们在 KspProcessor
写的 log !
<<: Day17. 老鼠,老虎傻傻分不清楚?- Mouse(下)
>>: Day 17 : 案例分享(5.3) CRM与ERP整合 - 商机与报价 及相关整合介绍
tags: 2021铁人赛 React 上一篇使用静态的资料,将多张数据资料表画成线图呈现在网页上,...
在我们辛苦开发完专案後,需要找一个网路空间,把我们的网站布署上去来提供服务,因此这篇我们将使用Git...
NAT 网路位址转换(英语:Network Address Translation,缩写:NAT)是...
另一个常见资料库分类是从「资料处理*」的应用角度来区分: 交易型Transaction: OLTP:...
时间静悄悄的来到第三周 本周让我开始觉得撞墙期开始了 周一的手写考卷就考得不如意 被考试手写与上机...