Gradle:仅解析所需变体的依赖关系

时间:2015-02-14 21:41:36

标签: android maven gradle

我有一个有三种口味的测试应用程序:

  • dev:在开发期间使用库的本地副本
  • qa:在QA期间使用快照
  • rc:使用预发布版本进行候选发布测试。

dependencies {
  devCompile project(':library')
  qaCompile 'com.example:library:1.0.0-SNAPSHOT@aar'
  rcCompile 'com.example:library:1.0.0@aar'
}

我运行Gradle,并期望它完成所需的最少工作量来构建我想要的东西:

./gradlew :test-app:connectedAndroidTestDevDebug

但是,构建失败了,因为它正在尝试解决所有构建版本的依赖关系,而不仅仅是我正在构建的版本。

  

失败:构建因异常而失败。

     

*出了什么问题:

     

配置项目':test-app'时出现问题。

     

无法解析配置的所有依赖项':test-app:_qaDebugCompile'。

     

找不到com.example:library1.0.0-SNAPSHOT。

Searched in the following locations:
     https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml
     https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom
     https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar
     http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml
     http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom
     http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar
     file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml
     file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom
     file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar
     file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml
     file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom
     file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar
 Required by:
     project-name:test-app:unspecified

qa风味试图解决的SNAPSHOT尚不存在,这应该没问题,因为我不是试图建立qa风格。如果存在SNAPSHOT构建,那么一切正常。

问题:

  1. 为什么所有构建版本的依赖项都已解决?
  2. 如何在不遇到此问题的情况下完成一种风格的构建?
  3. 有没有更好的方法来做更多的“Gradley”?

2 个答案:

答案 0 :(得分:0)

如果您手动排除任务,我认为构建有效吗?

gradle connectedAndroidTestDevDebug -x _qaDebugCompile

看起来任务connectedAndroidTestDevDebug依赖于任务_qaDebugCompile,这会导致您的问题。我不知道您的任务是如何定义的,但您可以使用Gradle的内置任务gradle dependenciesgradle dependencyInsight来研究您的依赖项。也许这会给你一个正确方向的暗示:

gradle dependencyInsight --dependency com.example:library:1.0.0-SNAPSHOT

您可以在the gradle User's guide中了解有关任务依赖关系的更多信息。

答案 1 :(得分:0)

我最终通过检查任务列表来解决这个问题,如果有所需构建变量的任务,则添加依赖项。

dependencies {
  gradle.startParameter.taskRequests.each { taskRequest ->
    taskRequest.args.each { taskName ->
      String flavorName = "qa";
      if (taskName.toLowerCase().endsWith(flavorName+"debug") ||
          taskName.toLowerCase().endsWith(flavorName+"release")) {
        qaCompile 'com.example:my-library:1.0.0-SNAPSHOT@aar'
      }
    }
  }
  devCompile project(':localLibrary')
//qaCompile 'com.example:my-library:1.0.0-SNAPSHOT@aar' // What I used to do.
  rcCompile 'com.example:my-library:1.0.0@aar'
}

请记住,任务列表不包含依赖的任务名称,因此,如果您没有调用包含构建样式名称的任务,则它将不起作用。这只是我工作的一部分。