我在學習Gradle是如何工作的,我無法理解它是如何解決項目傳遞依賴的。爲什麼Gradle在編譯/運行時類路徑中包含傳遞依賴關係?
現在,我有兩個項目:
- 了projectA:這對外部庫
- 項目B一對夫婦的依賴:它只有一個依賴於了projectA
不管如何我嘗試,當我構建projectB時,gradle在projectB的編譯或運行時類路徑中不包含任何projectA依賴項(X和Y)。我只設法通過在projectB的構建腳本中包含projectA的依賴項來實現它,在我看來這沒有任何意義。這些依賴關係應該自動附加到projectB。我很確定我錯過了什麼,但我無法弄清楚什麼。
我讀過關於「lib依賴關係」,但它似乎只適用於本地項目,如描述here,而不是外部依賴關係。
這裏是我的根項目中使用的build.gradle(同時包含了projectA和項目B的一個):
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.3'
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
group = 'com.company'
repositories {
mavenCentral()
add(new org.apache.ivy.plugins.resolver.SshResolver()) {
name = 'customRepo'
addIvyPattern "ssh://.../repository/[organization]/[module]/[revision]/[module].xml"
addArtifactPattern "ssh://.../[organization]/[module]/[revision]/[module](-[classifier]).[ext]"
}
}
sourceSets {
main {
java {
srcDir 'src/'
}
}
}
idea.module { downloadSources = true }
// task that create sources jar
task sourceJar(type: Jar) {
from sourceSets.main.java
classifier 'sources'
}
// Publishing configuration
uploadArchives {
repositories {
add project.repositories.customRepo
}
}
artifacts {
archives(sourceJar) {
name "$name-sources"
type 'source'
builtBy sourceJar
}
}
}
這其中只涉及了projectA:
version = '1.0'
dependencies {
compile 'com.company:X:1.0'
compile 'com.company:B:1.0'
}
這是在一個由項目B使用:
version = '1.0'
dependencies {
compile ('com.company:projectA:1.0') {
transitive = true
}
}
預先感謝您的任何幫助,並請道歉我爲我的壞英語。
兩件事情:傳遞是通過在同一個多模塊項目中的另一個項目的默認和依賴應該這樣指定:'編制項目(「:了projectA」) ' – stigkj
我有一個類似的問題,http://stackoverflow.com/questions/29661824/android-aar-dependencies#。到目前爲止,我無法實現它的工作。 –