在 Gradle 中,`test` 任务是一个预定义的任务,属于 Java 插件的一部分。因此,你不需要使用 `register` 来定义它,因为它已经由插件自动创建。
### 预定义任务 vs. 自定义任务
- **预定义任务**: 像 `test` 这样的任务已经由插件提供,你只需要配置它们。例如,Java 插件会自动创建 `compileJava`、`processResources`、`test` 等任务。
- **自定义任务**: 如果你需要创建一个新的任务,可以使用 `tasks.register("taskName")` 来注册。
### 为什么不需要 `register`?
- **自动创建**: 插件加载时,Gradle 会自动创建这些常用任务,因此你只需要配置现有任务的行为。
- **配置现有任务**: 通过 `tasks.test { ... }` 或 `tasks { test { ... } }`,你可以配置预定义任务的属性和行为,而不需要重新定义它们。
这种设计使得常见的构建任务更易于使用和配置。
plugins {
id("java")
id("com.github.johnrengelman.shadow") version "8.1.1"
}
group = "org.example"
version = "1.0-SNAPSHOT"
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
repositories {
mavenCentral()
}
dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
implementation("org.locationtech.jts:jts-core:1.20.0")
implementation("org.locationtech.jts.io:jts-io-common:1.20.0")
implementation("org.datasyslab:geotools-wrapper:1.6.1-28.2")
}
tasks {
test {
useJUnitPlatform()
}
}
tasks {
shadowJar {
archiveBaseName.set("your-app-name")
archiveClassifier.set("") // 默认为 "-all",设置为空以覆盖
archiveVersion.set("1.0.0")
manifest {
attributes["Main-Class"] = "org.example.JtsDemo" // 替换为你的主类全名
}
}
}