gradle 3.0.0-alphaX的库依赖问题

时间:2017-08-01 20:32:18

标签: android gradle android-gradle build.gradle jitpack

我有一个包含子模块的库项目,其中包含许多依赖项,我希望将这些依赖项传递给开发人员的应用程序。例如,模块A可能包含所有必需的appcompat依赖项。

使用migration changes,我已将所有compile个案件更新为api,这不应影响任何内容。但是,我不再能够访问任何库依赖项。我只能使用我自己库中的代码和引用。

有什么方法吗?

可以找到我的库子模块的一个构建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,implementation,@ aar和transitive的组合。

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

3 个答案:

答案 0 :(得分:0)

已在android-maven-gradle-plugin

的版本“2.0”中修复

只需更新到

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

或使用自Gradle 2.1以来的新语法

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

使用库模块中的api,您可以访问库代码中的瞬态依赖 ;不是消费它的应用程序。

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

implementation project(':core')

api project(':core')

注意您不需要在库中使用api,最好使用implementation,因为它可以加快您的构建速度。

答案 1 :(得分:0)

这个问题似乎与android-maven-gradle-plugin

有关

I ssue Report

答案 2 :(得分:0)

  

我无法再访问任何库依赖项。我只能使用我自己库中的代码和引用。

这是对的。

来自gradle docs

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

api配置中出现的依赖关系将是   传递给图书馆的消费者,因此会   出现在消费者的编译类路径中。

     

implementation配置中找到的依赖关系   另一方面,不要暴露给消费者,因此不会泄漏   消费者的编译类路径。这有几个好处:

     
      
  • 依赖关系不再泄漏到消费者的编译类路径中,因此您永远不会意外地依赖于传递   依赖
  •   
  • 由于减少了类路径大小,编译速度更快
  •   
  • 当实现依赖关系发生变化时,重新编译的次数减少:消费者不需要重新编译
  •   
  • 清洁发布:当与新的maven-publish插件结合使用时,Java库会生成POM文件   准确区分编译所需的内容   库以及在运行时使用库所需的内容(在其他方面)   单词,不要混合编译库本身所需的东西和什么   需要针对库进行编译。)
  •