2016-03-24 18 views
1

ich ein ziemlich einfaches Setup, das nicht funktioniert und ich kann nicht arbeiten, warum:gradle zirkuläre Abhängigkeit mit externen Projekt

die Ordnerstruktur ist wie folgt:

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

/Mainproject 
    /build.gradle 
    /settings.gradle 

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

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

ich das Teilprojekt wollen abhängig von "Abhängigkeit" lokal für schnelle Tests. so steckte ich auf das Handbuch und tat

/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') 
} 

/Abhängigkeit/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 
    } 
} 

Die build.gradle-Dateien von Subproject_1 und _2 sind leer. Die Datei settings.gradle der Abhängigkeit ist leer.

Wenn ich Hauptprojekt bauen Gradle i erhalten:

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

(*) - details omitted (listed previously) 

Und ich kann nicht meinen Kopf um, warum das so sein würde.

Irgendwelche Hinweise?

Antwort

1

Wenn Sie include "dependency" in Ihrem Hauptprojekt der settings.gradle Datei, können Sie das „Abhängigkeit“ Projekt ein Teilprojekt von „Mainproject“ machen.

Dann definiert dieser Block in der build.gradle-Datei Ihres Mainprojects "Abhängigkeit" als Kompilierabhängigkeit aller Unterprojekte.

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

Da die „Abhängigkeit“ Projekt ist auch ein Teilprojekt, haben Sie eine definierte zirkuläre Abhängigkeit, wo die „Abhängigkeit“ Projekt selbst abhängt.

Stattdessen versuchen, eine settings.gradle Datei für jeden der Teilprojekte mit der Schaffung folgenden:

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

dann Ihre settings.gradle Datei ändern für die Mainproject wie folgt aussehen:

include "Subproject_1", "Subproject_2" 
+0

Realisierte es ungefähr 2 Minuten nachdem ich gepostet habe, ging ich für alle Projekte - Projekt (': Abhängigkeit'). Nichtsdestotrotz, danke ^^ – billdoor

1

Sie haben festgestellt, dass allProjects eine Abhängigkeit von dem Projekt haben dependency wie hier zu sehen:

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

Sie müssen dies nur, um Ihre Projekte gelten, die nichtdependency. Sie können das tun, indem sie es ohne wenn Abhängigkeiten der Anwendung, wie diese

subprojects { project -> 
    if (project.name != "dependency") { 
     apply plugin: 'java' 
     dependencies { 
      compile project(path: ':dependency') 
     } 
    } 
} 
Verwandte Themen