2013-06-23 7 views
7

Я изучаю, как работает Gradle, и я не могу понять, как он решает транзитивные зависимости проекта.Почему Gradle не включает транзитивные зависимости в пути компиляции/времени выполнения?

На данный момент у меня есть два проекта:

  • Projecta: который имеет несколько зависимостей от внешних библиотек
  • projectB: который не имеет только одну зависимость от Projecta

Независимо от того, как Я пытаюсь, когда я создаю projectB, gradle не включает никакие зависимостей projectA (X и Y) в пути компиляции или runtime класса projectB. Мне только удалось заставить его работать, включив зависимости projectA в сценарий сборки projectB, который, на мой взгляд, не имеет никакого смысла. Эти зависимости должны автоматически присоединяться к projectB. Я почти уверен, что мне что-то не хватает, но я не могу понять, что.

Я читал о «зависимостях от lib», но, похоже, он применяется только к локальным проектам, как описано here, а не к внешним зависимостям.

Вот build.gradle я использую в корневом проекте (тот, который содержит как Projecta и 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 
     } 
    } 
} 

Это одна касается Projecta только:

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

И это тот, который используется проектом Б:

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

Заранее благодарю вас за любую помощь и прошу прощения. меня за плохой английский.

+0

2 вещи: транзитивное включена по умолчанию, и зависимость от другого проекта в одном проекте нескольких модулей должен быть указан следующим образом: 'компилировать проект («: Projecta») ' – stigkj

+0

У меня есть аналогичный вопрос: http://stackoverflow.com/questions/29661824/android-aar-dependencies#. До сих пор я не мог заставить его работать. –

ответ

1

И, наконец, проблема возникла не из сценариев. Я только что очистил кеш градиента и каждую папку сборки проекта, чтобы сделать эту работу.

+1

Серьезно провел последние 6 часов, пытаясь заставить это работать, и это были кеши. Должен был сначала проверить его. Благодаря! –

1

Поместите следующую строку в зависимости от проекта B.

компиляции проекта («: Projecta»)