Appearance
源码集(SourceSet)
源码集(SourceSet)定义了一组源代码文件和资源文件,以及它们的编译输出位置。Java 插件默认提供 main 和 test 两个源码集。
查看默认源码集
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")
}
}
}源码集与依赖配置的对应关系
| 源码集 | 编译配置 | 运行配置 |
|---|---|---|
main | compileClasspath / implementation | runtimeClasspath / runtimeOnly |
test | testCompileClasspath / testImplementation | testRuntimeClasspath / testRuntimeOnly |
integrationTest | integrationTestCompileClasspath | integrationTestRuntimeClasspath |