Maven下载时误将间接AAR依赖识别为JAR导致下载失败
问题描述
使用Maven项目下载Android依赖(因Gradle生成带哈希值的目录,难以定位文件,故不使用Gradle),大部分依赖可成功下载至本地仓库,但配置以下依赖时出现问题:
<dependency> <groupId>android.arch.persistence.room</groupId> <artifactId>runtime</artifactId> <version>1.1.1</version> <type>aar</type> </dependency>
该依赖间接依赖com.android.support:support-core-utils:26.1.0(实际为AAR库),但Maven错误将其识别为JAR,导致下载失败。
尝试通过dependencyManagement指定类型但无效:
<dependencyManagement> <dependencies> <dependency> <groupId>com.android.support</groupId> <artifactId>support-core-utils</artifactId> <type>aar</type> </dependency> </dependencies> </dependencyManagement>
解决方案
方法1:显式声明该依赖并指定类型与版本
在dependencies节点中直接添加该依赖,明确指定type为aar并补充版本号,覆盖间接依赖的默认类型:
<dependency> <groupId>com.android.support</groupId> <artifactId>support-core-utils</artifactId> <version>26.1.0</version> <type>aar</type> </dependency>
Maven会优先使用显式声明的依赖配置,忽略间接依赖中错误的类型标识。
方法2:完善dependencyManagement配置
之前的dependencyManagement缺少版本号,导致配置不生效。补充版本号后,可统一管理该依赖的类型:
<dependencyManagement> <dependencies> <dependency> <groupId>com.android.support</groupId> <artifactId>support-core-utils</artifactId> <version>26.1.0</version> <type>aar</type> </dependency> </dependencies> </dependencyManagement>
之后即使是间接依赖,Maven也会遵循dependencyManagement中指定的类型和版本。
方法3:配置Maven Android插件处理AAR依赖
确保项目中引入maven-android-plugin,并开启AAR支持(适用于较旧的Maven Android项目):
<build> <plugins> <plugin> <groupId>com.simpligility.maven.plugins</groupId> <artifactId>android-maven-plugin</artifactId> <version>4.6.0</version> <extensions>true</extensions> <configuration> <sdk> <platform>26</platform> </sdk> </configuration> </plugin> </plugins> </build>
该插件能正确识别和处理AAR类型的依赖,包括间接依赖。
内容的提问来源于stack exchange,提问作者Youthy J
相关产品推荐
相关产品推荐

