Я изучаю, как работает Gradle, и я не могу понять, как он решает транзитивные зависимости проекта.Почему Gradle не включает транзитивные зависимости в пути компиляции/времени выполнения?
На данный момент у меня есть два проекта:
- Projecta: который имеет несколько зависимостей от внешних библиотек
- projectB: который не имеет только одну зависимость от Projecta
Независимо от того, как Я пытаюсь, когда я создаю projectB, gradle не включает никакие зависимостей projectA (X и Y) в пути компиляции или runtime класса projectB. Мне только удалось заставить его работать, включив зависимости projectA в сценарий сборки projectB, который, на мой взгляд, не имеет никакого смысла. Эти зависимости должны автоматически присоединяться к projectB. Я почти уверен, что мне что-то не хватает, но я не могу понять, что.
Я читал о «зависимостях от lib», но, похоже, он применяется только к локальным проектам, как описано here, а не к внешним зависимостям.
Вот build.gradle я использую в корневом проекте (тот, который содержит как Projecta и projectB):
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'
}
И это тот, который используется проектом Б:
version = '1.0'
dependencies {
compile ('com.company:projectA:1.0') {
transitive = true
}
}
Заранее благодарю вас за любую помощь и прошу прощения. меня за плохой английский.
2 вещи: транзитивное включена по умолчанию, и зависимость от другого проекта в одном проекте нескольких модулей должен быть указан следующим образом: 'компилировать проект («: Projecta») ' – stigkj
У меня есть аналогичный вопрос: http://stackoverflow.com/questions/29661824/android-aar-dependencies#. До сих пор я не мог заставить его работать. –