Почему Gradle не включает транзитивные зависимости в compile / runtime classpath?

Я изучаю, как работает Gradle, и я не могу понять, как он разрешает транзитивные зависимости проекта.

на данный момент у меня есть два проекта:

  • projectA: который имеет несколько зависимостей от внешних библиотек
  • projectB: который имеет только одну зависимость от projectA

независимо от того, как я пытаюсь, когда я строю projectB, gradle не включает никаких зависимостей projectA (X и Y) в компиляцию или время выполнения projectB путь класса. Мне удалось заставить его работать, включив зависимости projectA в скрипт сборки projectB, что, на мой взгляд, не имеет никакого смысла. Эти зависимости должны быть автоматически присоединены к projectB. Я уверен, что что-то упускаю, но не могу понять, что именно.

Я читал о "зависимостях lib", но, похоже, это относится только к локальным проектам, как описано здесь, а не на внешние зависимости.

вот сборка.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
        }
    }
}

Это касается только проекта:

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
    }
}

заранее спасибо за любую помощь, и, пожалуйста, извинитесь за мой плохой английский.

2 ответов


наконец, проблема не в сценариях. Я только что очистил кэш gradle и папку сборки каждого проекта,чтобы сделать эту работу.


поместите следующую строку в зависимости projectB.

скомпилировать проект (': projectA')