Циркулярная ссылка между проектами при добавлении в 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
это в библиотеке. Вы должны положить его в app
build.gradle
файл.
settings.gradle
постараюсь получить библиотеку build.gradle
, Затем он попытается скомпилировать его, но он содержит ссылку на себя. Поэтому, когда он пытается скомпилировать эту ссылку, он захватывает тот же build.gradle
файл, пытается скомпилировать и находит ссылку на себя... и так далее.
Переместить эту строку:
compile project(':Libs:easypost-java-master')
на ваш app
build.gradle
и ты должен быть в порядке.