Циркулярная ссылка между проектами при добавлении в Gradle

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

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

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

Settings.Gradle

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

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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Вы помещаете ссылку на библиотеку в build.gradle это в библиотеке. Вы должны положить его в appbuild.gradle файл.

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

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

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

на ваш appbuild.gradle и ты должен быть в порядке.

Другие вопросы по тегам