首页 文章

如何为android gradle设置transitive jar依赖项

提问于
浏览
2

我有一个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 回答

  • 1

    解决此问题的一种非常简单的方法是将guava声明为Common项目的远程依赖项,并让Gradle在构建时解析它 . 远程依赖项是可传递的,您的应用程序将依赖于Common来获取它 .

    尝试将这些行添加到Common项目的build.gradle:

    dependencies {
      compile 'com.google.guava:guava:18.0'
    }
    

    然后配置Maven Central等基本存储库:

    repositories {
      mavenCentral()
    }
    

    并从lib /文件夹中删除guava jar文件 .

相关问题