I've a multi-module project using google's KSP version 1.8.10-1.0.9 and it would be helpful if someone can help me with disabling the task of code-generation in the tests sub-directory of the build directory.
This is roughly the structure of the project:
myProject
- api
- engine
- methods
- build.gradle.kts
```
dependencies {
implementation(project(":engine"))
implementation(project(":methodsProcessor"))
testImplementation(kotlin("test"))
testImplementation(testFixtures(project(":engine")))
testImplementation("org.junit.jupiter:junit-jupiter-params:5.8.2")
ksp(project(":methodsProcessor"))
}
```
- build
- generated
- ksp
- main
- kotlin
- methods
- PublicMethods.kt
- test ## I don't want this directory to be created at all
- kotlin
- methods
- PublicMethods.kt
- methodsProcessor
- build.gradle.kts (contents below)
```
dependencies {
implementation(libs.ksp.api)
}
```
- src.main.kotlin.processor.MethodsProcessor
## this file has a SymbolProcessor which creates a new file (PublicMethods.kt) in
## `methods/build/generated/ksp/main/kotlin/methods` &
## `methods/build/generated/ksp/test/kotlin/methods` (THIS I would like not to be created)
- build.gradle.kts
- settings.gradle.kts
```
rootProject.name = "myProject"
include("engine")
include("methods")
include("api")
include("methodsProcessor")
val kotlinVersion: String by settings
val kspVersion: String by settings
pluginManagement {
plugins {
// For some reason the global variables are not accessible here
val kotlinVersion: String by settings
val kspVersion: String by settings
kotlin("jvm") version kotlinVersion
kotlin("plugin.jpa") version kotlinVersion
kotlin("plugin.spring") version kotlinVersion
id("com.google.devtools.ksp") version kspVersion
}
}
dependencyResolutionManagement {
repositories {
mavenCentral()
}
versionCatalogs {
create("libs") {
library("ksp-api", "com.google.devtools.ksp:symbol-processing-api:$kspVersion")
}
}
}
```
When I run ./gradlew build
for my project, the output on the terminal looks like:
> Task :api:openApiGenerate
################################################################################
# Thanks for using OpenAPI Generator. #
# Please consider donation to help us maintain this project #
# https://opencollective.com/openapi_generator/donate #
################################################################################
Successfully generated code to /Users/gxyd/projects/solver-engine/api/build/generated-src/openapi
> Task :methods:kspKotlin
w: [ksp] hello world
Daemon will be stopped at the end of the build after running out of JVM memory
> Task :methods:kspTestKotlin
w: [ksp] hello world
So, the second task that you see, i.e. :methods:kspTestKotlin
is something I don't to it to run.
I've already tried having the below configuration in methods.build.gradle.kts
:
ksp {
tasks.named("kspTestKotlin") {
enabled = false
}
}
which raises the error saying, there is no task named "kspTestKotlin", while building my project.
By default, the
ksp
configuration applies to all source sets, while the other configurations (likekspTest
) only apply to specific ones.Starting from KSP 1.0.1, there is a property that allows you to enable this behavior for the
ksp
configuration as well. Simply add the following to yourgradle.properties
file:With this, the
ksp
configuration will only apply to the main source set. Starting from KSP 2.0, theksp
configuration will behave like this by default.This is documented here: KSP with Kotlin Multiplatform
The documentation is for multiplatform, but this applies to single-platform projects as well.