使用 Gradle 将提供的依赖项添加到测试类路径中



我已经provided如下所示的依赖范围。我的问题是,提供的依赖项在测试运行时不可见。如何配置它以保持依赖项provided但在测试类路径上可用?

apply plugin: 'java'
configurations {
    provided
}
sourceSets {
    main {
        compileClasspath += configurations.provided
    }
}
dependencies {
    provided 'com.google.guava:guava:18.0'
    provided 'org.apache.commons:commons-lang3:3.3.2'
    // Tests
    testCompile 'junit:junit:4.11'
    testCompile 'org.assertj:assertj-core:1.7.0'
    // Additional test compile dependencies
    testCompile 'joda-time:joda-time:2.2'
}

一种解决方案是添加依赖项,例如具有testCompile范围的 joda-time 库,但我不想重复任何条目。我相信可以通过适当的配置来实现。

有两种方法可以做到这一点。首先,让testRuntime配置从 provided 扩展。

configurations {
    provided
    testRuntime.extendsFrom(provided)
}

其次,可以将provided配置添加到test任务的类路径中。

test {
    classpath += configurations.provided
}

configurations 中增加了一行。不知道它是否是最好和适当的解决方案,但按预期工作。

configurations {
    provided
    testCompile.extendsFrom(provided)
}

我的情况

withType<Jar> {
    enabled = true
    isZip64 = true
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    archiveFileName.set("$project.jar")
    from(sourceSets.main.get().output)
    dependsOn(configurations.compileClasspath)
    from({
        configurations.compileClasspath.get().filter {
            it.name.endsWith("jar")
        }.map { zipTree(it) }
    }) {
        exclude("META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA")
    }
}

最新更新