【发布时间】:2013-06-29 07:00:16
【问题描述】:
我正在学习 Gradle 的工作原理,但我不明白它如何解决项目传递依赖关系。
目前,我有两个项目:
- projectA : 它对外部库有几个依赖项
- projectB : 它只对 projectA 有一个依赖
无论我如何尝试,当我构建 projectB 时,gradle 不会在 projectB 的编译或运行时类路径中包含任何 projectA 依赖项(X 和 Y)。我只是通过在 projectB 的构建脚本中包含 projectA 的依赖项来使其工作,在我看来这没有任何意义。这些依赖项应自动附加到 projectB。我很确定我错过了什么,但我不知道是什么。
我读过“lib 依赖项”,但它似乎只适用于here 所描述的本地项目,而不适用于外部依赖项。
这是我在根项目(包含 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
}
}
}
这仅涉及项目A:
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
}
}
提前感谢您的帮助,请为我的英语不好向我道歉。
【问题讨论】:
-
两件事:传递默认开启并且对同一个多模块项目中另一个项目的依赖应该这样指定:
compile project(":projectA") -
我有一个类似的问题,stackoverflow.com/questions/29661824/android-aar-dependencies#。到目前为止,我无法让它工作。
标签: build build-system dependency-management