3

假设一个项目布局是这样的:

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"))
}

现在,我需要一个任务,将根项目的所有依赖项(传递地)复制到某个目录,但不包括provided配置。我怎样才能做到这一点?

4

3 回答 3

8

要仅将编译依赖项(不在提供的依赖项集中)复制到目录,这应该有效:

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

希望这可以帮助。

于 2013-03-19T22:10:25.857 回答
4

对此有点着迷,并试图弄清楚如何去做。我让它与以下 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 集成按预期工作。

于 2013-03-22T08:01:18.627 回答
0

也看看提供的Compile without war 插件问题。

SpringSource propdeps Gradle 插件的概念具有提供的配置支持。

于 2013-10-10T13:58:52.297 回答