20

Gradle の仕組みを学んでいますが、Gradle がプロジェクトの推移的な依存関係を解決する方法を理解できません。

今のところ、2 つのプロジェクトがあります。

  • projectA : 外部ライブラリにいくつかの依存関係があります
  • projectB : projectA への依存関係が 1 つだけある

どのように試しても、projectB をビルドすると、gradle は projectB のコンパイルまたはランタイム クラスパスに projectA の依存関係 (X と Y) を含めません。私は、projectA の依存関係を projectB のビルド スクリプトに含めることによってのみ機能させることができましたが、これは私の意見では意味がありません。これらの依存関係は、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
    }
}

助けてくれてありがとう、そして私の悪い英語をお詫びします。

4

3 に答える 3

2

最後に、問題はスクリプトに起因するものではありませんでした。これを機能させるために、gradle のキャッシュと各プロジェクトのビルド フォルダーをクリアしました。

于 2013-06-24T16:30:10.830 に答える
1

次の行を projectB の依存関係に追加します。

プロジェクトをコンパイルします(':projectA')

于 2014-12-15T03:52:51.280 に答える