2014-02-21 151 views
4

我有一个问题,加载从maven中心库的依赖关系 我有一个库项目和我不同的客户端使用我的库。我的库依赖于GoolgePlayService以及appcompat-v7。 最近我开始使用Gradle而不是蚂蚁。所以我使用了andoird-library插件,并将我的library.aar文件放入我的本地依赖项中。 现在在我的TestApp中,我加载了来自本地maven的aar文件,但它并未从maven中央存储库加载depenecy文件。Android aar文件所需的依赖关系不加载

下面是我的build.gradle文件

应用插件:“Android的图书​​馆

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.0' 
    } 
} 

apply plugin: 'maven' 

version = "1.0.0_Build-1" 
group = "com.sflibrary" 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile ('com.google.android.gms:play-services:4.0.30') { 
     exclude module: 'support-v4' 
    } 
    compile 'com.android.support:appcompat-v7:+' 
    compile files('libs/android-support-v4.jar') 
    compile files('libs/libGoogleAnalyticsServices.jar') 
} 


android { 
    buildToolsVersion "17.0.0" 
    compileSdkVersion 17 
    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 17 
    } 

    lintOptions { 
     abortOnError false 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 

      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 

      renderscript.srcDirs = ['src'] 

      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 

     } 


     instrumentTest.setRoot('tests') 
    } 

} 

uploadArchives { 
    repositories { 
    mavenDeployer { 
     repository(url: "file://${System.env.HOME}/.m2/repository/") 
    } 
    } 
} 

当我运行“gradle这个uploadArchives”它能够上传到我的本地mavel库及其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.sflibrary</groupId> 
    <artifactId>library</artifactId> 
    <version>1.0.0_Build-1</version> 
    <packaging>aar</packaging> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.android.gms</groupId> 
      <artifactId>play-services</artifactId> 
      <version>4.0.30</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.android.support</groupId> 
     <artifactId>appcompat-v7</artifactId> 
     <version>+</version> 
     <scope>compile</scope> 
    </dependency> 
    </dependencies> 
</project> 

下面是我TestApp的build.gradle文件 申请Ÿ插件:“机器人” 应用插件:“行家”

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.+' 
    } 
} 

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 

    compile('com.snapfish:library:[email protected]') 
    compile files('libs/httpmime-4.2.1.jar') 
} 


android { 
    buildToolsVersion "17.0.0" 
    compileSdkVersion 17 
    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 17 
    } 

    lintOptions { 
     abortOnError false 
    } 

    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 

      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 

      renderscript.srcDirs = ['src'] 

      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 

     } 
     instrumentTest.setRoot('tests') 
    } 

} 

我得到以下错误

 Error Code: 
     1 
     Output: 
     /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1549: error: Error retrieving parent for item: No resource found that matches the given name '@style/Widget.AppCompat.Light.ActionBar.Solid'. 
     /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1552: error: Error: No resource found that matches the given name: attr 'background'. 
     /opt/usr/dev/gradel/AndroidSDK/TestApp/build/res/all/debug/values/values.xml:1556: error: Error: No resource found that matches the given name: attr 'subtitleTextStyle'. 

但是它工作正常,如果我再次speciy我TestApp的build.gradle我的依赖库文件依赖关系部分。这意味着它从本地maven存储库加载我的library.aar文件,但不从maven中央存储库加载appcompat-v7。

我不知道我在这里做了什么错误。

在此先感谢 桑巴Damerla

回答

1

目前,gradle这个不处理传递依赖

看到这个答案的更多详细信息:https://stackoverflow.com/a/20530181/115145

“仅用于其配置 项目库声明即使在涉及依赖关系的传递性问题时,也会考虑到当前已解决的问题。“

2

在我的情况,我能得到它的工作:

  • 上传AAR文件到我们我的Nexus
  • 我的Nexus添加到allprojects:库:行家:URL
  • 指定传递= TRUE的依赖,比如:

    compile('com.snapfish:library:[email protected]'){ 
        transitive=true 
    } 
    
  • 如果我在拍照的Maven我拉的构建,我也有设置此:

    configurations.all { 
        // check for updates every build (If a version number ends in -SNAPSHOT it is implicitly changing when looking for it in a maven repository) 
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds' 
    }