如何为android+;格拉德尔
我有一个Android应用程序项目,它依赖于一个香草Java项目(“:Common”):Common依赖于位于Java项目“lib”目录中的Guava。android项目中的java代码引用了Guava类(例如“list”类)以及在“:Common”中定义的类。android项目的编译失败,因为无法找到“Lists”类,但能够找到“:Common”本身中定义的类。我知道这是一种在纯Java场景中正常工作的配置,但我不明白为什么在这个Android案例中它会失败 注意:将“compilefiletree(dir:'../Common/lib',include:['*.jar'])添加到Android项目的依赖项中修复了编译错误,但显然这是次优的(您不必像gradle那样在两个地方定义依赖项) 我的android项目的build.gradle文件如下所示:如何为android+;格拉德尔,android,jar,compilation,gradle,dependency-management,Android,Jar,Compilation,Gradle,Dependency Management,我有一个Android应用程序项目,它依赖于一个香草Java项目(“:Common”):Common依赖于位于Java项目“lib”目录中的Guava。android项目中的java代码引用了Guava类(例如“list”类)以及在“:Common”中定义的类。android项目的编译失败,因为无法找到“Lists”类,但能够找到“:Common”本身中定义的类。我知道这是一种在纯Java场景中正常工作的配置,但我不明白为什么在这个Android案例中它会失败 注意:将“compilefilet
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'))
}
apply plugin: 'java'
sourceSets {
main.java.srcDirs = ['src']
}
dependencies {
compile (fileTree(dir: 'lib', includes: ['*.jar']))
}
我的java库项目(“:Common”)的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'))
}
apply plugin: 'java'
sourceSets {
main.java.srcDirs = ['src']
}
dependencies {
compile (fileTree(dir: 'lib', includes: ['*.jar']))
}
解决这个问题的一个非常简单的方法是将guava声明为公共项目的远程依赖项,并让Gradle在构建时解决它。远程依赖关系是可传递的,您的应用程序将通过依赖公共关系来获得它 尝试将以下行添加到公共项目的build.gradle中:
dependencies {
compile 'com.google.guava:guava:18.0'
}
然后配置基础存储库,如Maven Central:
repositories {
mavenCentral()
}
然后从lib/文件夹中删除GuavaJAR文件。有趣的是,当设置为远程时,依赖关系确实会变得可传递。这无疑是一个比我目前所做的更干净的解决方案,但实际上我正在寻找一种方法,使本地依赖关系具有可传递性(使维护Eclipse兼容性更容易)。这种不一致的短暂行为确实让人觉得它可能只是Android Gradle插件中的一个bug。