我有一个Android应用程序项目依赖于一个vanilla Java项目(':Common') . ':Common'依赖于位于Java项目'lib'目录中的Guava . android项目中的java代码引用了Guava类(例如'Lists'类)以及':Common'中定义的类 . 由于无法找到'Lists'类但是能够找到':Common'本身中定义的类,因此android项目的编译失败了 . 我知道这是一个通常在纯Java场景中工作的配置,但我无法弄清楚为什么它在这个Android案例中失败了 .
注意:将'compile fileTree(dir:'.. / Common / lib',include:['* .jar'])'添加到Android项目的依赖项中可以修复编译错误,但显然这不是最理想的(你不应该'必须在两个地方定义依赖关系,比如gradle中的依赖关系 .
我的android项目的build.gradle文件如下所示:
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {(omitted)}
sourceSets {
main.manifest.srcFile 'AndroidManifest.xml'
main.java.srcDirs = ['src']
main.resources.srcDirs = ['resources']
main.res.srcDirs = ['res']
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile (project(':Common'))
}
我的java库项目(':Common')的build.gradle文件如下所示:
apply plugin: 'java'
sourceSets {
main.java.srcDirs = ['src']
}
dependencies {
compile (fileTree(dir: 'lib', includes: ['*.jar']))
}
1 回答
解决此问题的一种非常简单的方法是将guava声明为Common项目的远程依赖项,并让Gradle在构建时解析它 . 远程依赖项是可传递的,您的应用程序将依赖于Common来获取它 .
尝试将这些行添加到Common项目的build.gradle:
然后配置Maven Central等基本存储库:
并从lib /文件夹中删除guava jar文件 .