2017-11-29 11 views
0

を理解し、私は構造を次ていますはGradleの依存関係

PROJECTA - >ProjectBの

に依存ProjectBの - >は、ProjectBのすべての作品をコンパイルProjectC

を依存します。


ProjectBの /build.gradle:

dependencies { 
    compile project(':ProjectC') 
} 

ProjectBの /settings.gradle:

include ':ProjectC' 
project(':ProjectC').projectDir = new File(settingsDir, '../ProjectC') 

しかし、PROJECTAにそれをコンパイルします

dependencies { 
    compile project(':ProjectB') 
} 

PROJECTA /settings.gradle:

include ':ProjectB' 
project(':ProjectB').projectDir = new File(settingsDir, '../ProjectB') 

それはProjectC


PROJECTA /build.gradleを見つけることができないと言います

これは、次のエラーが表示されます:私はそれがPROJECTAProjectC含めて動作させるためでした

Where: Build file ProjectB\build.gradle

What went wrong:

A problem occurred evaluating project ':ProjectB'.

Project with path ':ProjectC' could not be found in project ':ProjectB'.


を。しかし、これは私が望むものではありません。

私もPROJECTAに排除しようとしたが、didntの仕事

PROJECTA /build.gradle:

dependencies { 
    compile (project (':ProjectB')) { 
    exclude module: ':ProjectC' 
    } 
} 

をしかし、同じエラーが表示されます。

どうすればこの問題を解決できますか?

答えて

1

マルチプロジェクトビルドはカスケードできません。 settings.gradleファイルは、複数のプロジェクトビルドで1つだけ用意してもいいし、複数でなくてもかまいません。

期待どおりに動作しているだけでなく、別のディレクトリからGradleを呼び出すと、さらに混乱することがあります。 Gradleは、何も指定されていない場合はsettings.gradleを見つけるために(そしてmasterと呼ばれるディレクトリに)検索します。次に、settings.gradleを評価し、作業ディレクトリがあるプロジェクトが、settings.gradleファイルで定義されているマルチプロジェクトビルドの一部であるかどうかを確認します。そうであれば、それはマルチプロジェクトビルドのコンテキストで実行されます。そうでなければ、スタンドアロンビルドとして実行されます。

ProjectAからGradleを呼び出すと、ProjectBの中からGradleを呼び出す場合とは異なる設定になっている可能性があります。

複数のマルチプロジェクトビルドを1つのビルドに構成する場合は、代わりにGradleBuildタスクまたは複合ビルドを使用する必要があります。どちらの場合も、サブビルドは完全に独立しており、それ自体がマルチプロジェクトビルドである可能性があります。どちらを使用するかは、正確なユースケースに依存します。

関連する問題