Java 附加来自其他配置的依赖项

Java 附加来自其他配置的依赖项,java,gradle,Java,Gradle,我的项目是一个遵循标准约定(src/main、src/test..)的Java项目。我正在尝试编写一个简单的Gradle任务,它将发出两个jar文件: Gradle发出的包含我的应用程序代码的“默认”jar 一个jar,只包含运行它们所需的测试类和依赖项(例如Junit)。这个jar不应该包含仅由非测试代码所需的依赖项(例如下面示例中的Guava) 我试图在下面的testJar任务中使用“testCompile”,但这也会选择非测试jar。因此,我创建了一个单独的配置,只列出了测试依赖项,但

我的项目是一个遵循标准约定(src/main、src/test..)的Java项目。我正在尝试编写一个简单的Gradle任务,它将发出两个jar文件:

  • Gradle发出的包含我的应用程序代码的“默认”jar

  • 一个jar,只包含运行它们所需的测试类和依赖项(例如Junit)。这个jar不应该包含仅由非测试代码所需的依赖项(例如下面示例中的Guava)

我试图在下面的testJar任务中使用“testCompile”,但这也会选择非测试jar。因此,我创建了一个单独的配置,只列出了测试依赖项,但现在正如我所预期的那样,测试无法编译,因为“testCompile”配置没有正确填充

我还没有在DependencyHandler API中看到将一个配置分配给另一个配置的方法(我对Gradle的了解有限,Gradle定义了dependencies块中的DSL)如何将testJars依赖项集添加到testCompile集(而不是替换),以便一切都“正常”?我在下面的代码中添加了一条注释,我假设缺少的间隙是,但我可能错了

apply plugin: 'java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
    mavenCentral()
}

configurations {
    testJars
}

dependencies {
    compile group: 'com.google.guava', name: 'guava', version: '14.0.1'
    testJars group: 'junit', name: 'junit', version: '4.+'
    //"testCompile append testJars"??
}

task testJar(type: Jar) {
    classifier = 'tests'
    from sourceSets.test.output
    from { configurations.testJars.collect { it.isDirectory() ? it : zipTree(it) } }
}

假设自定义
testJars
配置是内置
testCompile
配置的一个子集,您应该能够将
配置
块更改为:

configurations {
    testJars
    testCompile {
        extendsFrom testJars
    }
}

它将扩展
testCompile
,以包括
testjar
拥有的所有内容。我认为这将为您提供编译测试代码所需的类路径。

不完全确定您正在尝试做什么,但将此添加到
配置
块可能会实现它:
testCompile{extendsFrom testJars}