There are two flavors of KSP2 artifacts: symbol-processing-aa
and symbol-processing-aa-embeddable
. They are both
uber jars that include almost all runtime dependencies except kotlin-stdlib
, kotlinx-coroutines
and
symbol-processing-common-deps
. The -embeddable
version is the regular version with all the runtime dependencies
renamed, so that it can be used with a Kotlin compiler in the same classpath without name clash. When in doubt, use
symbol-processing-aa-embeddable
.
Calling KSP2 consists of just 4 steps:
- Load processors
- Provide an implementation of
KSPLogger
, or useKspGradleLogger
, which currently simply writes to stdout. - Fill
KSPConfig
- Call
KotlinSymbolProcessing(kspConfig, processors, kspLogger).execute()
// Implement a logger or use KspGradleLogger
val logger = KspGradleLogger(KspGradleLogger.LOGGING_LEVEL_WARN)
// Load processors
val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray())
val processorProviders = ServiceLoader.load(
processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"),
processorClassloader
).toList() as List<SymbolProcessorProvider>
// Fill the config
val kspConfig = KSPJvmConfig.Builder().apply {
// All configurations happen here. See KSPConfig.kt for all available options.
moduleName = "main"
sourceRoots = listOf(File("/path/to/src1"), File("/path/to/src2"))
kotlinOutputDir = File("/path/to/kotlin/out")
// ...
}.build()
// Run!
val exitCode = KotlinSymbolProcessing(kspConfig, processorProviders, kspLoggerImpl).execute()