Gradle 复制不包括某些配置的依赖项

Gradle 复制不包括某些配置的依赖项,gradle,Gradle,假设项目布局如下所示: allprojects { apply plugin: "java" configurations { provided compile.extendsFrom(provided) } } project("a") { dependencies { compile("foo:bar:1.0") ... provided("bar:baz:3.14")

假设项目布局如下所示:

allprojects {
    apply plugin: "java"

    configurations {
        provided
        compile.extendsFrom(provided)
    }
}

project("a") {
    dependencies {
        compile("foo:bar:1.0")
        ...
        provided("bar:baz:3.14")
        ...
    }
}

project("b") {
    dependencies {
        compile("abc:def:1.0")
        ...
        provided("xyz:foo:3.14")
        ...
    }
}

dependencies {
    compile(project(":a"))
    compile(project(":b"))
}

现在,我需要一个任务,它将根项目的所有依赖项(可传递地)复制到某个目录,但不包括提供的
配置。如何执行此操作?

若要仅将编译依赖项(不在提供的依赖项集中)复制到目录中,应执行以下操作:

task copyDependencies(type:Copy) {
    from (configurations.compile - configurations.provided)
    into 'build/dependencies'
}

希望这能有所帮助。

对此有点着迷,并试图找出解决方法。我把它和下面的gradle文件一起使用。请注意配置部分以及复制依赖项的位置

allprojects {
    apply plugin: "java"

    configurations {
        provided
    }

    sourceSets {
        main { 
            compileClasspath += configurations.provided 
        }
    }

    repositories {
        mavenCentral()
    }
}

project("a") {
    dependencies {
        compile("jdom:jdom:1.0")
        provided("javax.servlet:servlet-api:2.5")
    }
}

project("b") {
    dependencies {
        compile("javax.jcr:jcr:2.0")
        provided("commons-logging:commons-logging:1.0")
    }
}

dependencies {
    compile(project(":a"))
    compile(project(":b"))
}

task copyDependencies(type:Copy) {
    from configurations.compile
    into 'build/dependencies'
}
我认为这是解决这个问题的一个更简单的办法,但我没有弄明白。但是这个有效。唯一的问题是,您还必须将提供的配置添加到idea/eclipse类路径中,以使ide集成能够正常工作。

还可以看看这个问题


有一个概念是提供配置支持。

不幸的是,这不起作用-所有依赖项都会被复制。可能是因为声明为
provided
的依赖项可传递到根项目。在执行该任务时,configurations.provided似乎为空。不确定与发布时相比发生了什么变化,但现在似乎可以正常工作。谢谢