MissingPropertyException:Gradle 任务因未知属性而失败

问题描述 投票:0回答:1

我遇到以下错误:

    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 所知?

java gradle
1个回答
1
投票

使用 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

属性将被设置

© www.soinside.com 2019 - 2024. All rights reserved.