库与Gradle 3.0.0-alphaX的依赖关系问题

我有一个包含许多依赖关系的子模块的库项目,我想传递给开发人员的应用程序。 例如,模块A可能包含所有必要的appcompat依赖项。

随着迁移的变化 ,我已经更新所有的compile案例为api ,这不应该影响任何东西。 但是,我不再有权访问任何库依赖项。 我只能使用我的库本身的代码和引用。

有没有办法解决?

我的库子模块的一个构建gradle文件可以在这里找到供参考。

依赖关系:

 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中抽取。 看到这个gradle作为一个不会构建的例子。 我尝试过使用api,implementation,@aar和transitive的组合。

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

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

我想报告

我不再有权访问任何库依赖项。 我只能使用我的库本身的代码和引用。

它是正确的。

从gradle文档 :

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

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

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

  • 依赖关系不会泄漏到消费者的编译类路径中,所以您将永远不会意外地依赖于传递依赖项
  • 更快的编译感谢减少的类路径大小
  • 当实现依赖关系发生变化时,重新编译会更少:消费者不需要重新编译
  • 清理器发布:当与新的maven-publish插件结合使用时,Java库会生成POM文件,这些文件可以精确地区分编译库所需的内容和运行时使用库所需的内容(换句话说,不要混合编译图书馆本身所需要的东西,以及对图书馆编译所需的东西)。

已经在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因为它加速了你的构建。