【问题标题】:Copy dependencies excluding some configuration复制不包括某些配置的依赖项
【发布时间】:2013-03-08 14:00:04
【问题描述】:

假设项目布局如下:

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 配置。我该怎么做?

【问题讨论】:

    标签: gradle


    【解决方案1】:

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

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

    希望这会有所帮助。

    【讨论】:

    • 不幸的是,这不起作用-所有依赖项都被复制了。可能是因为声明为 provided 的依赖项可以传递到根项目。
    • 执行该任务时,configurations.provided 似乎为空。
    • 不确定与发布时相比有何变化,但这似乎现在可以使用。谢谢!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      看看providedCompile without war plugin问题。

      SpringSource propdeps Gradle plugin 的概念提供了配置支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-20
        • 2023-03-24
        • 2018-04-13
        • 2016-07-19
        • 2016-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多