2015-12-29 3 views
2

Я добавляю библиотеку Easypost в свой Android-приложение, и из моего понимания мне нужно ссылаться на него как на settings.gradle, так и на build.gradle. Но когда я делаю это, я получаю ошибку:Циркулярная ссылка между проектами при добавлении в 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') 
} 

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

Project Structure

+0

Пожалуйста, разместите полную версию проекта, то есть каталог и структуру файла. – nautical

+0

@nautical Я добавил скриншот, показывающий мою структуру. – JasSy

ответ

2

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

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

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

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

+0

Удаление это позволяет мне синхронизировать, но его бесполезно, поскольку я не могу выполнить необходимый импорт. Com.easypost.EasyPost – JasSy

+0

Где вы делаете импорт? Я предполагаю в другом модуле? Вам придется объявить зависимость в файле build.gradle этого проекта/модуля. – nautical

+0

Да Я объявляю в build.gradle связанного модуля. – JasSy

0

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

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

+0

Если я удалю это, я не смогу импортировать com.easypost.EasyPost. Сохранение его там не позволяет мне синхронизировать, поэтому не уверен, действительно ли мне это нужно в обоих местах. – JasSy

+0

Убедитесь, что банка находится в папке lib, а затем удалите импорт в обоих параметрах и build.gradle. – Distwo

+0

Это проект с .java-файлами. Нет файлов jar. Это от https://github.com/EasyPost/easypost-java – JasSy

0

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

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

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

+0

Я не понимаю. Я только компилирую один раз. – JasSy

0

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

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

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

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

app к вашему build.gradle, и вы должны быть хорошо.

1

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

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

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

Смежные вопросы