2013-06-23 7 views
7

Uczę się, jak działa Gradle i nie mogę zrozumieć, w jaki sposób rozwiązuje zależności przechodnie projektu.Dlaczego Gradle nie uwzględnia zależności przechodnich w ścieżce klas kompilacji/środowiska wykonawczego?

Na razie mam dwa projekty:

  • Projecta: który ma kilka zależności na zewnętrznych bibliotek
  • projectB: który ma tylko jedną zależność od Projecta

Nieważne jak Próbuję, gdy buduję projectB, gradle nie zawiera żadnych zależności projectA (X i Y) w ścieżce klasy kompilacji lub środowiska wykonawczego projectB. Udało mi się tylko sprawić, żeby działało, włączając w to zależności projektu A w skrypcie budowania projektu B, co moim zdaniem nie ma żadnego sensu. Te zależności powinny być automatycznie dołączane do projektu B. Jestem prawie pewien, że czegoś mi brakuje, ale nie wiem, co.

Przeczytałem o "zależnościach lib", ale wydaje się, że dotyczy to tylko lokalnych projektów, takich jak opisane here, a nie na zewnętrznych zależnościach.

Oto build.gradle używam w projekcie korzenia (ten, który zawiera zarówno Projecta i projectB):

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 
     } 
    } 
} 

Ten Projecta dotyczy wyłącznie:

version = '1.0' 
dependencies { 
    compile 'com.company:X:1.0' 
    compile 'com.company:B:1.0' 
} 

I to jest ten użyty przez projektB:

version = '1.0' 
dependencies { 
    compile ('com.company:projectA:1.0') { 
     transitive = true 
    } 
} 

Z góry dziękujemy za pomoc i przepraszamy ja dla mojego złego angielskiego.

+0

2 rzeczy: przechodnia jest włączona domyślnie i zależność od innego projektu w tym samym projekcie wielomodułowego należy określić tak: 'skompilować projekt („: Projecta”) ' – stigkj

+0

Mam podobne pytanie, http://stackoverflow.com/questions/29661824/android-aar-dependencies#. Do tej pory nie mogłem go uruchomić. –

Odpowiedz

1

Wreszcie problem nie pochodzi ze skryptów. Właśnie wyczyściłem pamięć podręczną gradle i folder kompilacji każdego projektu, aby to działało.

+1

Poważnie spędził ostatnie 6 godzin próbując to uruchomić i to były pamięci podręczne. Powinienem najpierw to sprawdzić. Dzięki! –

1

Umieścić następujący wiersz w zależnościach projektuB.

projekt kompilacji („: Projecta”)

Powiązane problemy