2013-03-19 47 views
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

有點癡迷於此,並試圖找出如何做到這一點。我用它來處理下面的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 classpath中,以使IDE集成能夠按照預期工作。

8

只複製編譯依賴(即不設定所提供的依賴)到一個目錄,這應該工作:

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

希望這有助於。

+0

這不幸的是不起作用 - 所有的依賴關係被複制。可能是因爲聲明爲「provided」的依賴關係對於根項目是傳遞的。 – ghik 2013-03-20 17:29:46

+0

執行該任務時,似乎配置文件爲空。 – 2013-03-22 07:40:43

+0

不確定發佈時發生了什麼變化,但現在看起來似乎有效。謝謝! – 2013-04-13 23:15:50