Skip to content

源码集(SourceSet)

源码集(SourceSet)定义了一组源代码文件和资源文件,以及它们的编译输出位置。Java 插件默认提供 maintest 两个源码集。

查看默认源码集

kotlin
sourceSets {
    main {
        println("Java 源码目录:${java.srcDirs}")
        // [src/main/java]
        println("资源目录:${resources.srcDirs}")
        // [src/main/resources]
        println("输出目录:${output.classesDirs}")
        // [build/classes/java/main]
    }
    test {
        println("测试源码目录:${java.srcDirs}")
        // [src/test/java]
    }
}

修改源码目录

kotlin
sourceSets {
    main {
        java {
            srcDirs("src", "generated/src")          // 替换
            srcDir("legacy/src")                      // 添加
        }
        resources {
            srcDir("config")
        }
    }
}

创建自定义源码集

常用于集成测试、性能测试等场景:

kotlin
// 创建集成测试源码集
sourceSets {
    create("integrationTest") {
        java {
            srcDir("src/integrationTest/java")
        }
        resources {
            srcDir("src/integrationTest/resources")
        }
        // 继承 main 和 test 的编译输出
        compileClasspath += sourceSets.main.get().output + sourceSets.test.get().output
        runtimeClasspath += compileClasspath
    }
}

// 为集成测试创建依赖配置
val integrationTestImplementation by configurations.getting {
    extendsFrom(configurations.testImplementation.get())
}
val integrationTestRuntimeOnly by configurations.getting

// 添加依赖
dependencies {
    integrationTestImplementation("org.springframework.boot:spring-boot-starter-test:3.2.0")
    integrationTestImplementation("org.testcontainers:testcontainers:1.19.3")
    integrationTestImplementation("org.testcontainers:mysql:1.19.3")
}

// 创建集成测试任务
tasks.register<Test>("integrationTest") {
    description = "运行集成测试"
    group = "verification"
    
    testClassesDirs = sourceSets["integrationTest"].output.classesDirs
    classpath = sourceSets["integrationTest"].runtimeClasspath
    
    useJUnitPlatform()
    
    // 集成测试需要特殊配置
    environment("SPRING_PROFILES_ACTIVE", "integration-test")
    
    mustRunAfter(tasks.named("test"))
}

// check 任务包含集成测试
tasks.named("check") {
    dependsOn(tasks.named("integrationTest"))
}

Kotlin 源码集

kotlin
plugins {
    kotlin("jvm") version "1.9.22"
}

sourceSets {
    main {
        kotlin {
            srcDir("src/main/kotlin")
        }
    }
    test {
        kotlin {
            srcDir("src/test/kotlin")
        }
    }
}

源码集与依赖配置的对应关系

源码集编译配置运行配置
maincompileClasspath / implementationruntimeClasspath / runtimeOnly
testtestCompileClasspath / testImplementationtestRuntimeClasspath / testRuntimeOnly
integrationTestintegrationTestCompileClasspathintegrationTestRuntimeClasspath

下一步