2017-02-21 171 views
0

我建立一個jar文件,在編譯時,取決於3件的logback文物(的logback碼,的logback經典,的logback的擴展)搖籃依賴管理

這些都與compile聲明範圍。

我的jar生成了,但是當我嘗試在不同的項目中使用它時,我發現我需要再次指定3個logback依賴項,否則就找不到這些類。我期待這些依賴已經通過聲明對我的jar的依賴來實現。

我是新來的gradle和使用現有的腳本,我只有最懂的理解。

EDIT - Added some details of the dependency config

在其構建的jar文件的項目,依賴聲明如下

compile group: 'ch.qos.logback',name: 'logback-classic', version: '1.2.1' compile group: 'ch.qos.logback',name: 'logback-core', version: '1.2.1' compile group: 'org.logback-extensions',name: 'logback-ext-spring', version: '0.1.4'

我一個農產品中的「其他」項目依賴關係聲明的jar文件 compile group: 'mygroup',name: 'mylogback', version: '1.0.0-SNAPSHOT'

這個依賴項是從我的本地maven倉庫中提取的,而logback依賴項來自nex我們回購。

Further Edit 其他項目的依賴關係樹有這個,這似乎支持我的觀點,該項目沒有帶來它的依賴與它....

> | +--- commons-io:commons-io:2.5 | \--- 
> commons-collections:commons-collections:3.2.2 
> +--- mygroup:mylogback:1.0.0-SNAPSHOT 
> +--- ch.qos.logback:logback-classic:1.2.1 | +--- ch.qos.logback:logback-core:1.2.1 | \--- org.slf4j:slf4j-api:1.7.22 
> +--- ch.qos.logback:logback-core:1.2.1 
> +--- org.logback-extensions:logback-ext-spring:0.1.4 | \--- ch.qos.logback:logback-classic:1.1.1 -> 1.2.1 (*) 

Resolution

回答我自己的問題,問題是由於

  • 在我的構建腳本中缺少maven-publish插件
  • 形成嚴重publishing發佈的任務artefact:jar。把它改爲from components.java的確有竅門
+0

請說明如何聲明依賴關係。我覺得他們是本地基於文件的依賴項而不是maven/ivy依賴項 –

+0

@LanceJava:我已經添加了一些我希望看到的更多細節 – DaveH

+0

問題似乎是,gradle無法將logback識別爲您的項目的傳遞依賴項。我現在不知道用gradle來做這件事。也許在項目中添加一個pom文件,將logback標識爲運行時依賴性。我相信gradle認可maven pom文件。 – DwB

回答

1

我感覺到你的問題在編譯好的時候在你的工件的部署中。

確保您的部署/上傳定義與目標artefact存儲庫(本地maven,在您的情況,對不對?)是相同的格式。您可以通過在目標文件夾中查找pom文件(或根據您的定義查看常青藤文件)來檢查它,並檢查它是否包含正確格式的詳細信息。

你的定義是這樣嗎? :

apply plugin: 'maven' 

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: "file://localhost/tmp/myRepo/") 
     } 
    } 
} 

查看更多細節The Gradle documentation on maven plugin

更多的出版可以Gradle documentation on publishing多的依賴分辨率,在一般模式讀取可以在Gradle documentation on dependency management

0

找到應用依賴於所有子項目。

subprojects { 
    dependencies { 
     // ... 
    } 
} 

還有一個完整的api能夠選擇特定的項目並將配置應用於它們。

configure([project(":a"), project(":b"), project(":c")]) { 
    dependencies { 
     // ... 
    } 
} 

configure(subprojects.findAll { it.name.startsWith("prefix") }) { 
    dependencies { 
     // ... 
    } 
} 

此外,如果您希望傳遞依賴性工作,您需要通過gradle添加項目間依賴關係。

dependencies { 
    compile project(":toolbox") 
}