使用gradle的aar库不能解决传递依赖问题
我已经调查了一段时间,可能在这里看到最受欢迎的答案有关阿尔和传递依赖,但不知何故,我仍然不清楚如何使这个工作。
所以:
我有Android库给定的gradleconfiguration:
apply plugin: 'android-library' apply plugin: 'android-maven' version = "1.0.0" group = "com.somepackage" buildscript { repositories { mavenCentral() mavenLocal() } dependencies { classpath 'com.github.dcendents:android-maven-plugin:1.0' } } android { compileSdkVersion 19 buildToolsVersion '19.0.3' defaultConfig { minSdkVersion 10 } } repositories { maven { url 'http://www.bugsense.com/gradle/' } } dependencies { provided 'com.google.android.gms:play-services:+' provided 'com.android.support:appcompat-v7:+' compile 'com.google.code.gson:gson:2.2.4' compile 'com.bugsense.trace:bugsense:3.6' compile 'commons-net:commons-net:3.3' }
然后,我将它部署到当地的Maven回购与gradle install
。 部署库的POM文件如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.sprezzat</groupId> <artifactId>app</artifactId> <version>1.0.0</version> <packaging>aar</packaging> <dependencies> <dependency> <groupId>com.bugsense.trace</groupId> <artifactId>bugsense</artifactId> <version>3.6</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> <scope>compile</scope> </dependency> </dependencies> </project>
最后,我的Android应用程序使用上面的库作为依赖gradleconfiguration:
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' } } apply plugin: 'android' repositories { mavenCentral() mavenLocal() } android { compileSdkVersion 15 buildToolsVersion "19.0.2" defaultConfig { minSdkVersion 10 targetSdkVersion 18 } } dependencies { compile 'com.google.android.gms:play-services:+' compile 'com.android.support:appcompat-v7:+' compile 'com.somepackage:LIBRARY_NAME:1.0.0@aar' }
在手机上部署应用程序后,我得到属于我的android库的编译依赖关系的类的NoClassDefFoundError
。
使用gradle dependencies
检查我的android应用程序依赖gradle dependencies
:
apk - Classpath packaged with the compiled main classes. +--- com.google.android.gms:play-services:+ -> 4.3.23 | \--- com.android.support:support-v4:19.0.1 -> 19.1.0 +--- com.android.support:appcompat-v7:+ -> 19.1.0 | \--- com.android.support:support-v4:19.1.0 \--- com.somepackage:LIBRARY_NAME:1.0.0
根据上面的树,所有的传递依赖不被检测到。 问题在哪里,怎样才能正确完成?
我已经通过设置我的aar依赖关系的transitive
属性来解决我的问题:
compile ('com.somepackage:LIBRARY_NAME:1.0.0@aar'){ transitive=true }
你不应该使用“@aar”,如果使用“@”变成“ Artifact only notation notation ”,如果你想使用“@”并且要有依赖性传递,你应该添加“transitive = true”
如果你在本地使用aar,试试这个:
compile(project(:your-library-name)) { transitive=true }