我遇到以下错误:
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'integrationTest' for SourceSet container of type org.gradle.api.internal.tasks.DefaultSourceSetContainer.
这是我的build.gradle
文件。我已经定义了一个 integrationTest
任务。
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.8'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.app.api'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'junit:junit:4.13.1'
}
tasks.register('integrationTest', Test) {
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}
tasks.withType(Jar).configureEach {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes["Main-Class"] = 'com.app.api.ApiApplication'
}
configurations["compileClasspath"].each { file ->
from(zipTree(file.absoluteFile))
}
}
如何让 integrationTest
属性为 gradle 所知?
使用 ext
块(它允许您定义可以从构建文件中的任何位置访问的自定义属性和方法),我可以添加自定义属性 integrationTest
ext {
integrationTest = project.hasProperty('integrationTest')
}
我在 integrationTest
任务中添加了一张支票:
tasks.register('integrationTest', Test) {
if (integrationTest) {
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}
}
现在,当我通过终端添加系统属性时:
./gradlew integrationTest DintegrationTest=true
属性将被设置