2016-03-24 21 views
1

私は動作しないと私はなぜうまくいかないことができ、かなり簡単なセットアップを持っている:Gradleの循環依存関係

次のようにフォルダ構造は次のとおりです。

/dependency 
    /build.gradle 
    /settings.gradle 
    /src/main/... 

/Mainproject 
    /build.gradle 
    /settings.gradle 

    /Subproject_1 
     /build.gradle 
     /src/main... 

    /Subproject_2 
     /build.gradle 
     /src/main... 

私はサブプロジェクトがしたいです迅速なテストのためにローカルの依存関係に依存します。 ので、私はマニュアルにこだわったとやった:

/Mainproject/settings.gradle:

include "Subproject_1", "Subproject_2", "dependency" 
project(":dependency").projectDir = file('../dependency') 

/Mainproject/build.gradle:

allprojects { 
    apply plugin: 'java' 
    dependencies { 
     compile project(path: ':dependency') 
    } 
} 

dependencies { 
    compile project(':Subproject_1') 
    compile project(':Subproject_2') 
} 

/依存/ build.gradle:

version '1.0' 
apply plugin: 'java' 

repositories { 
    maven { 
     url "http://...." 
    } 
} 

dependencies { 
    compile group: 'commons-lang', name: 'commons-lang', version: '2.6' 
    compile group: 'javax', name: 'javaee-api', version: '7.0' 
} 

jar { 
    manifest { 
     attributes 'Implementation-Title': 'Archive delegation dispatcher classes', 
       'Implementation-Version': project.version 
    } 
} 

Subproject_1と_2のbuild.gradleファイルは空です。 依存関係のsettings.gradleファイルは空です。

私はMainProjectを構築Gradleのときに私が得る:

Circular dependency between the following tasks: 
:dependency:classes 
\--- :dependency:compileJava 
    \--- :dependency:jar 
      \--- :dependency:classes (*) 

(*) - details omitted (listed previously) 

そして、私はそれは次のようになり、なぜまわりで私の頭を取得することはできません。

ヒント

答えて

1

のように、依存関係を適用するときあなたはそれを除外することでそれを行うことができます。

Mainprojectのbuild.gradleファイルのこのブロックは、すべてのサブプロジェクトのコンパイル依存として「依存関係」を定義します。

allProjects { 
    dependencies { 
     compile project(path: ':dependency') 
    } 
} 

「依存」プロジェクトはまた、サブプロジェクトであるので、あなたは、「依存関係」プロジェクトは、それ自体に依存して定義された円形の依存関係を持っています。

代わりに、以下でサブプロジェクトのそれぞれについて、settings.gradleファイルを作成してみてください:

include "dependency" 
project(":dependency").projectDir = file('../dependency') 

次に、このように見えるようにMainprojectのためのあなたのsettings.gradleファイルを変更します。

include "Subproject_1", "Subproject_2" 
+0

私が投稿してから約2分後に実現しました。プロジェクト( ':dependency')のすべてのプロジェクトに行きました。それでも、ありがとう^^ – billdoor

1

あなたはここに見られるようallProjectsは、プロジェクトdependencyへの依存性を持っていると述べました:

allprojects { 
    apply plugin: 'java' 
    dependencies { 
     compile project(path: ':dependency') 
    } 
} 

あなただけにこれを必要とするdependencyではありませんあなたのプロジェクトに適用されます。あなたはMainprojectのsettings.gradleファイルでinclude "dependency"、あなたは「依存」プロジェクト「Mainproject」のサブプロジェクトを行っている場合は、この

subprojects { project -> 
    if (project.name != "dependency") { 
     apply plugin: 'java' 
     dependencies { 
      compile project(path: ':dependency') 
     } 
    } 
} 
関連する問題