Java 在gradle添加时项目之间的循环引用

Java 在gradle添加时项目之间的循环引用,java,android,android-studio,easypost,Java,Android,Android Studio,Easypost,我正在将Easypost库添加到我的Android项目中,据我所知,我需要在settings.gradle和build.gradle中引用它。但当我这样做时,我得到了一个错误: Error:Circular reference between projects: :Libs:easypost-java-master -> :Libs:easypost-java-master 如果删除其中任何一个位置的引用,我可以无错误地同步,但无法导入com.easypost.easypost。所以我

我正在将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'
建造,格雷德尔

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')
}
我的项目结构


从Settings.gradle中删除include
':Libs:easypost java master'
,并从build.gradle中删除
编译项目(':Libs:easypost java master')


如果将库放在“libs”中,则行
编译文件树(dir:'libs',include:['*.jar'])
会将其添加到构建步骤中。

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

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

如果不简单,请遵循逻辑。它也是一个删除依赖项的选项,因为它是一个子依赖项。

您标记的build.gradle文件包含一个将自身作为依赖项的引用。这是尽可能短的循环参考。如果你移除

compile project(':Libs:easypost-java-master')
你可能会没事的。我说可能是因为我放弃了IntelliJ的想法。它并没有让Gradle的事情变得更简单,而是引入了一个额外的、冗余的复杂性层。IntelliJ的想法对我来说并不可行


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

您正在将库参考放入库中的
build.gradle
。您应该将其放入
应用程序
build.gradle
文件中

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

移动此行:

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

到你的
应用程序
build.gradle
,你应该没事。

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

与build.gradle文件和settings.gradle文件中的
编译项目(':lib')
类似,对于库模块,':lib'
两者应具有相同的名称
':lib'


这将解决问题。

请发布完整的项目设置,即目录和文件结构。@我已添加显示我的结构的屏幕截图。如果删除该截图,我将无法导入com.easypost.easypost。将它保留在那里也不会让我同步,因此无法确定我是否确实需要在这两个位置使用它。请确保jar位于lib文件夹中,然后同时删除设置和build中的导入。gradleIt是一个包含.java文件的项目。没有jar文件。它是从以前的include and compile中删除的,并添加了编译文件树(dir:'libs',include:['*.jar'])。能够很好地同步,但仍然无法导入com.easypost.easypost。我无法获取它。我只编译了一次。删除它确实可以让我很好地同步,但它没有用,因为我无法执行必要的导入com.easypost.easypost您在哪里执行导入?我在另一个模块中假设?您必须在该项目的/module的build.gradle文件中声明依赖项。是的,我在相关模块的build.gradle文件中声明依赖项。那么您要声明哪个依赖项?在屏幕截图中,看起来您正在同一模块中声明它。我看到至少三个build.gradle文件。哪一个属于具有需要导入的类的模块?底部右侧的一个用于整个项目。我很确定我不应该在里面乱搞。我指的那个(中间)在我试图添加的库(easypost java master)中。右上方是我最初创建MainActivity所在项目时项目的右上方。