我正在学习 Gradle 的工作原理,但我不明白它如何解决项目的传递依赖关系。
目前,我有两个项目:
- projectA :它对外部库有几个依赖项
- projectB :它对 projectA 只有一个依赖项
无论我如何尝试,当我构建 projectB 时,gradle 都不在 projectB 的编译或运行时类路径中包含任何 projectA 依赖项(X 和 Y)。我只是通过在 projectB 的构建脚本中包含 projectA 的依赖项来使其工作,在我看来这没有任何意义。这些依赖项应自动附加到 projectB。我很确定我错过了一些东西,但我不知道是什么。
我读过“lib 依赖项”,但它似乎只适用于这里描述的本地项目,而不适用于外部依赖项。
这是我在根项目(包含 projectA 和 projectB 的项目)中使用的 build.gradle:
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'
}
这是 projectB 使用的:
version = '1.0'
dependencies {
compile ('com.company:projectA:1.0') {
transitive = true
}
}
提前感谢您的帮助,请为我的英语不好向我道歉。