Gradle мультипроектных нескольких зависимостей - PullRequest
0 голосов
/ 31 мая 2018

У меня есть проект gradle, подобный этому:

root
  |
  |---- projectA
  |
  |---- projectB
 ...

Мой корневой build.gradle содержит зависимости, которые необходимы для projectA и projectB.Я определил их следующим образом:

subprojects {
    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
    }
    dependencies {
        compile 'com.google.guava:guava:23.0'
        compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'

Теперь я пытаюсь добавить зависимость от projectA из projectB, чтобы мой buildBgra.gradle из projectB выглядел так:

dependencies {
    implementation project(':projectA')
}

и настройки projectB.gradle:

include ':projectA'
project(':projectA').projectDir = new File(settingsDir, '../projectA')

В настоящее время это не удается, так как ProjectA и B не зависят от root для получения необходимых зависимостей.

Могу ли я добавить еще одну зависимость от projectA в корневой каталог или каков метод gradle по умолчанию для совместного использования тех же зависимостей из одного корневого проекта?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Указание зависимостей с помощью ключевого слова compile устарело.Новое ключевое слово для использования - «реализация».(См. этот вопрос SO для примера объяснения .) Разница между «compile» и «реализацией» в том, что касается вашего случая, заключается в том, что «compile» распространяет зависимость на все подключенные модули, в то время как «реализация "является одноуровневой.Итак, если у вас есть

root
  module A
  module B

и модуль B имеет вычленение, введенное с помощью «compile», тогда root имеет доступ к этой зависимости.Но если вы теперь измените B, чтобы ввести зависимость с помощью «реализации», вам все равно нужно будет добавить зависимость в build.gradle корневого проекта.

Почему это важно?Потому что дочерний модуль не может знать, кто его родитель.Таким образом, хотя A и B видят зависимости, которые вы привели в root, они на самом деле не должны - видеть эти зависимости - это причуда того, как работает Studio.По этой же причине ответ на вопрос «Могу ли я добавить еще одну зависимость от ProjectA для root»: «Нет, вам не повезло, это создаст круговую зависимость, и это не разрешено».

я бы попробовал следующие зависимости:

И в модуле A, и в модуле B:

dependencies {
  implementation 'com.google.guava:guava:23.0'
  implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2'

Затем в модуле B вы делаете:

implementation project(':projectA')

Затем в корне, вы зависите от A и B.

0 голосов
/ 31 мая 2018

Ваши модули (A и B) неправильно настроены как дочерние модули корневого проекта.В базовой папке создайте, если необходимо, файл settings.gradle и добавьте определение дочерних модулей:

root / settings.gradle

include 'projectA', 'projectB'

build.gradle файл проектаB в порядке, тогда вам нужно удалить файл root/projectB/settings.gradle;дочерние модули и их расположение указываются в родительском файле сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...