2013-06-23 26 views
7

私はGradleのしくみを学んでいます。プロジェクトの過渡的な依存関係をどのように解決するのか理解できません。なぜGradleにコンパイル/ランタイムクラスパスの推移的な依存関係が含まれていないのですか?

  • PROJECTA:どんなにPROJECTA

に一つだけの依存関係を持っていない:外部ライブラリ

  • ProjectBの依存関係のカップルを持っている

    今のところ、私は2つのプロジェクトを持っています私はprojectBをビルドするとき、gradleはprojectBのコンパイル時または実行時のクラスパスにprojectAの依存関係(XとY)を含んでいません。私はprojectAの依存関係をprojectBのビルドスクリプトに含めることで動作させることしかできませんでしたが、私の意見では意味がありません。これらの依存関係は、自動的にprojectBにアタッチする必要があります。私は何かが不足していると確信していますが、私は何が分かりません。

    私は "lib依存関係"について読んだことがありますが、これはhereのようなローカルプロジェクトにのみ適用され、外部依存関係には適用されないようです。ここで

    は私がルートプロジェクト(PROJECTAとProjectBの両方が含まれている1)で使用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 
         } 
        } 
    } 
    

    この1だけ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 
        } 
    } 
    

    ご協力いただきありがとうございます、お詫び申し上げます私の悪い英語の私。

  • +0

    2のものは: 'プロジェクトをコンパイル:推移は次のように指定する必要があり、同じマルチモジュールプロジェクト内の別のプロジェクトでデフォルトと依存でオンになっている(「:PROJECTA」) ' – stigkj

    +0

    私にも同様の質問があります。http://stackoverflow.com/questions/29661824/android-aar-dependencies#これまでのところ、私はそれを働かせることができませんでした。 –

    答えて

    1

    最後に、この問題はスクリプトの問題ではありませんでした。私はgradleのキャッシュと各プロジェクトのビルドフォルダをクリアして、この作業を行いました。

    +1

    これを稼働させるために真剣に過去6時間を費やしました。それはキャッシュでした。最初にチェックしておかなければならない。ありがとう! –

    1

    次の行をprojectBの依存関係に置きます。

    コンパイルプロジェクト(「:PROJECTA」)

    関連する問題