代码之家  ›  专栏  ›  技术社区  ›  Allan W

gradle 3.0.0-alphaX的库依赖性问题

  •  4
  • Allan W  · 技术社区  · 7 年前

    A 可能包括所有必要的appcompat依赖项。

    migration changes ,我已经更新了所有 compile 案例至 api

    有什么办法吗?

    可以找到我的库子模块的一个build gradle文件 here

    依赖项:

    dependencies {
        api "org.jetbrains.kotlin:kotlin-stdlib:${KOTLIN}"
    
        api "com.android.support:appcompat-v7:${ANDROID_SUPPORT_LIBS}"
        api "com.android.support:support-v13:${ANDROID_SUPPORT_LIBS}"
        api "com.android.support:design:${ANDROID_SUPPORT_LIBS}"
        api "com.android.support:recyclerview-v7:${ANDROID_SUPPORT_LIBS}"
        api "com.android.support:cardview-v7:${ANDROID_SUPPORT_LIBS}"
        api "com.android.support.constraint:constraint-layout:${CONSTRAINT_LAYOUT}"
    
        api "com.mikepenz:iconics-core:${ICONICS}@aar"
        api "com.mikepenz:google-material-typeface:${IICON_GOOGLE}.original@aar"
    
        api "com.afollestad.material-dialogs:core:${MATERIAL_DIALOG}"
    
        api "com.jakewharton.timber:timber:${TIMBER}"
    
        api "org.jetbrains.anko:anko-commons:${ANKO}"
    }
    

    要澄清的是,模块中的示例项目实际上构建正确,但在任何其他应用程序中使用依赖项都存在问题,因为它来自jitpack。看见 this gradle 作为一个无法构建的示例。 我尝试过使用api、实现、@aar和可传递性的组合。

    想想看,这可能是一个jitpack问题,而不是gradle问题,但如果其他人有解决方案,我想听听。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Gabriele Mariotti    7 年前

    这是正确的。

    gradle docs :

    dependencies {
        api 'commons-httpclient:commons-httpclient:3.1'
        implementation 'org.apache.commons:commons-lang3:3.5' 
    }
    

    出现在 api 配置将是

    在中找到依赖项 implementation 配置将在 消费者的编译类路径。这有几个好处:

    • 依赖项不再泄漏到使用者的编译类路径中,因此您永远不会意外地依赖于传递类
    • 由于类路径大小减小,编译速度加快
    • 当实现依赖关系发生变化时减少重新编译:消费者不需要重新编译
    • 准确区分根据 换句话说,不要将编译库本身所需的内容与 需要根据库进行编译)。

        2
  •  0
  •   Allan W    7 年前
        3
  •  0
  •   humazed    7 年前

    它已在的“2.0”版本中修复 android-maven-gradle-plugin

    只需更新到

    dependencies {
            classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
    }
    

    plugins {
      id "com.github.dcendents.android-maven" version "2.0"
    }
    


    使用 api 在库模块中,您可以访问瞬态依赖项

    因此,为了达到预期效果,您需要更改示例模块。

    implementation project(':core')
    

    api project(':core')
    

    笔记 应用程序编程接口 在你的图书馆里最好使用 implementation