Я добавляю библиотеку Easypost в свой проект Android, и, насколько я понимаю, мне нужно ссылаться на нее как в settings.gradle, так и в build.gradle. Но когда я это делаю, я получаю сообщение об ошибке:

Error:Circular reference between projects: 
:Libs:easypost-java-master -> :Libs:easypost-java-master

Если я удалю ссылку на одном из них, я смогу выполнить синхронизацию без ошибок, но не смогу импортировать com.easypost.EasyPost. Итак, я предполагаю, что мне нужно ссылаться в обоих местах, но как мне избежать ошибки циклической ссылки?

Настройки.Грейд

include ':app'
include ':Libs:easypost-java-master'

Build.Gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile project(':Libs:easypost-java-master')
}

Моя структура проекта

Структура проекта

2
JasSy 30 Дек 2015 в 02:37

5 ответов

Лучший ответ

Отмеченный вами файл build.gradle содержит ссылку на себя как на зависимость. Это самый короткий круговой справочник. Если вы удалите

compile project(':Libs:easypost-java-master')

С вами может все хорошо. Я говорю может , потому что отказался от IntelliJ Idea. Вместо того, чтобы упростить работу с Gradle, он просто ввел дополнительный, избыточный уровень сложности, с которым я имел дело вместо этого. IntelliJ Idea просто не сработала для меня.

Лучший совет, который я могу дать, - сначала настроить свой проект вручную, чтобы понять, как Gradle обрабатывает проекты. Это крутая кривая обучения, но в моем случае это сэкономило намного больше времени и избавило от головной боли в долгосрочной перспективе.

3
Cody Gray 5 Ноя 2019 в 02:44

Вы помещаете ссылку на библиотеку в build.gradle, который находится в библиотеке. Вы должны поместить его в файл app build.gradle.

settings.gradle попытается получить библиотеку build.gradle. Затем он попытается скомпилировать его, но содержит ссылку на себя. Поэтому, когда он пытается скомпилировать эту ссылку, он захватывает тот же файл build.gradle, пытается скомпилировать и находит ссылку на себя ... и так далее.

Переместите эту строку:

compile project(':Libs:easypost-java-master')

К вашему app build.gradle, и все будет в порядке.

0
Jim 30 Дек 2015 в 00:23

Удалите include ':Libs:easypost-java-master' из Settings.gradle и удалите compile project(':Libs:easypost-java-master') из build.gradle.

Если вы поместите свою библиотеку в "библиотеки", строка compile fileTree(dir: 'libs', include: ['*.jar']) добавит ее к этапам сборки.

0
Distwo 29 Дек 2015 в 23:40

Вы можете соответствующим образом добавить следующий фрагмент со своей проблемой зависимости:

compile 'dep1' {
  exclude module: 'dep2' 
}
compile 'dep2' {
  exclude module: 'dep1' 
}

Если это не так просто, следуйте логике. Это также вариант для удаления зависимости, поскольку это подчиненная зависимость.

0
Iliiaz Akhmedov 29 Дек 2015 в 23:41

Просто убедитесь, что вы использовали одно и то же имя в файле build.gradle для приложения и в файле settings.gradle в скриптах Gradle.

Как compile project(':lib') в файле build.gradle & amp; в файле settings.gradle include ':sample', ':lib' оба должны иметь одинаковое имя ':lib' для модуля библиотеки.

Это решит проблему.

1
DalveerSinghDaiya 25 Май 2017 в 05:43