2016-05-05 6 views
2

私は他のプロジェクトに依存しています。私はまた、それぞれが同じプロジェクトに依存する2つのプロジェクトに依存するプロジェクトを持っています。このような何か:クラスパスにプロジェクトを追加しないでください。

-Project A 
* Project 1 
    ** Project C 
* Project 2 
    ** Project C 

とワークスペースの構造は、このようなものです:

-ProjectA 
-ProjectC 
-Project1 
-Project2 

すべてのプロジェクトは同じレベルにあります。

include ':Project1',':Project1:ProjectC',[...] 
project(':Project1') = new File('../Project1') 
project(':Project2') = new File('../Project2') 
project(':Project1:ProjectC') = new File('../ProjectC') 
project(':Project2:ProjectC') = new File('../ProjectC') 

をそして私はbuild.gradleに:私のプロジェクトAIでsettings.gradleでそう

は持って

dependencies{ compile project('Project1'),project('Project2') 

問題は、それが正しくに追加されていないことですクラスパス。私はProject1とProject2の両方がProjectCに依存しているので、何とか上書きされていると思います。何か案は?

ありがとうございました。このように見えるワークスペースの

Root project 'ProjectA' 
+--- Project ':ProjectB' 
| \--- Project ':ProjectB:Project1' 
|   +--- Project ':ProjectB:Project1:Project2' 
|   \--- Project ':ProjectB:Project1:Project3' 
\--- Project ':ProjectC' 
    \--- Project ':ProjectC:Project1' 
      +--- Project ':ProjectC:Project1:Project2' 
      \--- Project ':ProjectC:Project1:Project3' 
+0

projectCが1つの場所にある場合は、settings.gradleに2回追加するべきではありません。代わりに、Project1とProject2はそれぞれの依存関係のセクションでprojectCを記述する必要があります。 – RaGe

+0

Project1とProject2は、ProjectCのそれぞれの依存関係について言及しています。しかし、プロジェクトAで言及すると、Project1またはProject2のいずれかのグラデーションで、Project1:ProjectCを見つけることができないことがわかります。私はそれを追加することを余儀なくされます。プロジェクトを追加すると、彼が依存するプロジェクトへの参照を追加する必要があります。 – EricJ

+0

私はいくつかの情報を追加しました。 – EricJ

答えて

0

うわ

build.gradle

eclipse{ 
    classpath{ 
     file{ 
      whenMerged { classpath -> 

       classpath.entries.find { entry -> 
        entry.kind == 'src' && entry.path.contains('ProjectC') 
       }.each{ entry -> 
        entry.path=file("/ProjectC") 
       } 



      } 
     } 
    } 
} 

そして、それが正常に動作します:私はついにやったtがこのようなパスという間違ったクラスパスの変化です。私はまだgradleがクラスパスを正しく作ってくれない理由を知りません...

1

:ここでEDIT

は、依存関係のツリーです

rootFolder 
| 
|- build.gradle 
|- settings.gradle 
| 
|- ProjectA 
| |-build.gradle 
| 
|- Project1 
| |-build.gradle 
| 
|- Project2 
| |-build.gradle 
| 
|- ProjectC 
    |-build.gradle 

あなたsettings.gradleは関係なく、(次のようになります。サブプロジェクトの依存関係):

include ':ProjectA',':Project1',':Project2',':ProjectC', 

ルートプロジェクトには、4つのサブプロジェクトとその場所が示されています。それでおしまい。

ここで、依存関係は各サブプロジェクトのbuild.gradleファイル内で処理されます。

ProjectA 
|-Project1 
| |-ProjectC 
| 
|-Project2 
    |-ProjectC 

PROJECTAのbuild.gradle:

dependencies{ 
    compile project(':Project1') 
    compile project(':Project2') 
} 

のProject1のbuild.gradle:

dependencies{ 
    compile project(':ProjectC') 
} 

のProject2のbuild.gradle:

dependencies{ 
    compile project(':ProjectC') 
} 
次のようになります依存関係のため
+0

事はすべてのプロジェクトが同じレベルにあるということです。したがって、ProjectA settings.gradleはProject1:ProjectCの参照を作成する必要があります。 – EricJ

+0

私が示したように、ルートレベルのsettings.gradleを使用することを強くお勧めします。物事を単純に保つだけです。 – RaGe

+0

これを行うには、projectCのリファレンスはproject1のものとまったく同じに見えます。 'include '/ ProjectC''と一度だけです。 – RaGe

関連する問題