2

我正在向我的 Android peoject 添加一个 Easypost 库,据我了解,我需要在 settings.gradle 和 build.gradle 中引用它。但是当我这样做时,我得到了错误:

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

如果我删除其中任何一个的引用,我可以在没有错误的情况下同步,但无法导入 com.easypost.EasyPost。所以我猜我确实需要在这两个地方进行引用,但是如何避免循环引用错误?

设置.Gradle

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

构建.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')
}

我的项目结构

项目结构

4

5 回答 5

3

您标记的 build.gradle 文件包含对自身的引用作为依赖项。这是最短的循环引用。如果你删除

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

可能会没事的。我说可能是因为我放弃了 IntelliJ Idea。Gradle 并没有让事情变得更容易,它只是引入了一个额外的、冗余的复杂层,而我已经处理了它。IntelliJ Idea 不适合我。

我能给出的最佳建议是首先手动设置您的项目,以便了解 gradle 如何处理项目。这是一个陡峭的学习曲线,但从长远来看,它节省了更多的时间和头痛。

于 2015-12-30T00:01:42.750 回答
1

只需确保您在应用程序的 build.gradle 文件和 Gradle 脚本中的 settings.gradle 文件中使用了完全相同的名称。

就像 compile project(':lib')在 build.gradle 文件和 settings.gradle 文件中一样,库模块include ':sample', ':lib'都应该具有相同':lib'的名称。

这将解决问题。

于 2016-10-14T11:38:08.907 回答
0

':Libs:easypost-java-master'从 Settings.gradle 中删除 include并compile project(':Libs:easypost-java-master')从 build.gradle 中删除。

如果您将库放在“库”中,则该行compile fileTree(dir: 'libs', include: ['*.jar'])会将其添加到构建步骤中。

于 2015-12-29T23:40:31.377 回答
0

您可以适当地添加以下代码段与您的依赖问题:

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

如果不是直截了当,请按照逻辑进行。它也是删除依赖项的一个选项,因为它是一个子依赖项。

于 2015-12-29T23:41:44.197 回答
0

您正在将库引用放在build.gradle库中。你应该把它放在app build.gradle文件中。

settings.gradle尝试获取图书馆的build.gradle. 然后它将尝试编译它,但它包含对自身的引用。因此,当它尝试编译该引用时,它会抓取同一个build.gradle文件,尝试编译并找到对自身的引用......等等。

移动这一行:

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

给你的app build.gradle,你应该没问题。

于 2015-12-30T00:23:09.133 回答