Android库托管在我正在工作的公司的私人Maven Artifactory仓库中。 这个库使用okhttp作为依赖项之一。
在应用程序项目中,我导入了这个库:
编译'com.domain.artifact:myartifact:1.0.0@aar'
导入了库,但是当我在库中调用API时,由于缺少okhttp类,应用程序因ClassNotFoundException而崩溃。
执行gradle命令打印依赖项表明应用程序项目没有下载任何库的依赖项(包括okhttp)
+--- com.domain.artifact:myartifact:1.0.0
\--- com.android.support:appcompat-v7:25.0.1
\--- com.android.support:support-v4:25.0.1
+--- com.android.support:support-compat:25.0.1
| \--- com.android.support:support-annotations:25.0.1
+--- com.android.support:support-media-compat:25.0.1
| \--- com.android.support:support-compat:25.0.1 (*)
+--- com.android.support:support-core-utils:25.0.1
| \--- com.android.support:support-compat:25.0.1 (*)
\--- com.android.support:support-core-ui:25.0.1
如何确保成功下载或发布库的依赖项?
======其他信息=======
该库使用“maven-publish”插件发布,并且在gradle脚本中使用“pom.withXml”添加依赖项,并且okhttp位于库的POM文件中。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.4.1</version>
</dependency>
答案 0 :(得分:3)
您在依赖项中使用 @aar
表示法。
这意味着您只想下载除了所有嵌套依赖项之外的aar工件
您可以查看documentation的这一部分:
查看Artifact only notation
部分:
仅工件表示法创建模块依赖项,该依赖项仅下载具有指定扩展名的工件文件。 忽略现有模块描述符。
如果要下载依赖项,请使用@aar
表示法,添加transitive=true
。
我希望省略@aar它应该有用。