diff --git a/src/functionalTest/kotlin/dev/monosoul/jooq/functional/ConfigurabilityJooqDockerPluginFunctionalTest.kt b/src/functionalTest/kotlin/dev/monosoul/jooq/functional/ConfigurabilityJooqDockerPluginFunctionalTest.kt
index 662608e..3b183e5 100644
--- a/src/functionalTest/kotlin/dev/monosoul/jooq/functional/ConfigurabilityJooqDockerPluginFunctionalTest.kt
+++ b/src/functionalTest/kotlin/dev/monosoul/jooq/functional/ConfigurabilityJooqDockerPluginFunctionalTest.kt
@@ -4,7 +4,9 @@ import org.gradle.testkit.runner.TaskOutcome.SUCCESS
 import org.junit.jupiter.api.Test
 import strikt.api.expect
 import strikt.assertions.isEqualTo
+import strikt.assertions.isNull
 import strikt.java.exists
+import strikt.java.notExists
 
 class ConfigurabilityJooqDockerPluginFunctionalTest : dev.monosoul.jooq.functional.JooqDockerPluginFunctionalTestBase() {
     @Test
@@ -218,4 +220,68 @@ class ConfigurabilityJooqDockerPluginFunctionalTest : dev.monosoul.jooq.function
             ).exists()
         }
     }
+
+    @Test
+    fun `should respect targetSourceSet task property`() {
+        // given
+        prepareBuildGradleFile {
+            """
+            import dev.monosoul.jooq.RecommendedVersions
+                
+            plugins {
+                kotlin("jvm") version "1.9.20"
+                id("dev.monosoul.jooq-docker")
+            }
+
+            repositories {
+                mavenCentral()
+            }
+            
+            sourceSets {
+                create("custom") {
+                    compileClasspath = files(main.map { it.compileClasspath })
+                    runtimeClasspath = files(main.map { it.runtimeClasspath })
+                }
+            }
+
+            tasks.generateJooqClasses {
+                targetSourceSet.set("custom")
+            }
+
+            dependencies {
+                jooqCodegen("org.postgresql:postgresql:42.3.6")
+                
+                implementation("org.postgresql:postgresql:42.5.4")
+                implementation("org.jooq:jooq:${'$'}{RecommendedVersions.JOOQ_VERSION}")
+                implementation("org.flywaydb:flyway-core:${'$'}{RecommendedVersions.FLYWAY_VERSION}")
+            }
+            """.trimIndent()
+        }
+        copyResource(
+            from = "/V01__init_multiple_schemas.sql",
+            to = "src/main/resources/db/migration/V01__init_multiple_schemas.sql",
+        )
+
+        // when
+        val mainSourceSetCompilationResult = runGradleWithArguments("classes")
+
+        // then
+        expect {
+            that(mainSourceSetCompilationResult).getTask("generateJooqClasses").isNull()
+            that(
+                projectFile("build/generated-jooq/org/jooq/generated/tables/Foo.java"),
+            ).notExists()
+        }
+
+        // and when
+        val testSourceSetCompilationResult = runGradleWithArguments("customClasses")
+
+        // then
+        expect {
+            that(testSourceSetCompilationResult).generateJooqClassesTask.outcome isEqualTo SUCCESS
+            that(
+                projectFile("build/generated-jooq/org/jooq/generated/tables/Foo.java"),
+            ).exists()
+        }
+    }
 }
diff --git a/src/main/kotlin/dev/monosoul/jooq/GenerateJooqClassesTask.kt b/src/main/kotlin/dev/monosoul/jooq/GenerateJooqClassesTask.kt
index 769b236..f77475b 100644
--- a/src/main/kotlin/dev/monosoul/jooq/GenerateJooqClassesTask.kt
+++ b/src/main/kotlin/dev/monosoul/jooq/GenerateJooqClassesTask.kt
@@ -33,6 +33,7 @@ import org.gradle.api.tasks.Classpath
 import org.gradle.api.tasks.Input
 import org.gradle.api.tasks.Nested
 import org.gradle.api.tasks.OutputDirectory
+import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
 import org.gradle.api.tasks.TaskAction
 import org.gradle.kotlin.dsl.getByType
 import org.gradle.kotlin.dsl.listProperty
@@ -54,6 +55,12 @@ open class GenerateJooqClassesTask
         private val projectLayout: ProjectLayout,
     ) : DefaultTask(),
         SettingsAware {
+        /**
+         * Source set name to include generated sources into.
+         */
+        @Input
+        val targetSourceSet = objectFactory.property<String>().convention(MAIN_SOURCE_SET_NAME)
+
         /**
          * List of schemas to take into account when running migrations and generating code.
          */
diff --git a/src/main/kotlin/dev/monosoul/jooq/JooqDockerPlugin.kt b/src/main/kotlin/dev/monosoul/jooq/JooqDockerPlugin.kt
index 14f79cf..41d5f67 100644
--- a/src/main/kotlin/dev/monosoul/jooq/JooqDockerPlugin.kt
+++ b/src/main/kotlin/dev/monosoul/jooq/JooqDockerPlugin.kt
@@ -7,7 +7,6 @@ import org.gradle.api.attributes.Bundling
 import org.gradle.api.attributes.Bundling.BUNDLING_ATTRIBUTE
 import org.gradle.api.plugins.JavaPluginExtension
 import org.gradle.api.provider.ProviderFactory
-import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
 import org.gradle.kotlin.dsl.create
 import org.gradle.kotlin.dsl.findByType
 import org.gradle.kotlin.dsl.named
@@ -42,9 +41,13 @@ open class JooqDockerPlugin
                 tasks.register<GenerateJooqClassesTask>("generateJooqClasses")
                 pluginManager.withPlugin("org.gradle.java") {
                     extensions.findByType<JavaPluginExtension>()?.run {
-                        sourceSets.named(MAIN_SOURCE_SET_NAME) {
+                        sourceSets.configureEach {
                             java {
-                                srcDirs(tasks.withType<GenerateJooqClassesTask>())
+                                srcDirs(
+                                    tasks
+                                        .withType<GenerateJooqClassesTask>()
+                                        .matching { it.targetSourceSet.get() == this@configureEach.name },
+                                )
                             }
                         }
                     }