2015-02-14 23 views
8

Tôi có một ứng dụng thử nghiệm với ba hương vị:Gradle: Chỉ giải quyết phụ thuộc cho các biến thể mong muốn

  • dev: Sử dụng một bản sao cục bộ của thư viện trong phát triển
  • qa: Sử dụng một bản chụp trong QA
  • rc: Sử dụng bản dựng trước để phát hành thử nghiệm ứng cử viên.

dependencies { 
    devCompile project(':library') 
    qaCompile 'com.example:library:[email protected]' 
    rcCompile 'com.example:library:[email protected]' 
} 

tôi chạy Gradle, và hy vọng nó sẽ làm số tiền tối thiểu của công việc cần thiết để xây dựng chỉ là những gì tôi muốn:

./gradlew :test-app:connectedAndroidTestDevDebug 

Tuy nhiên, việc xây dựng thất bại, bởi vì nó là cố gắng giải quyết các phụ thuộc cho tất cả các hương vị xây dựng, không chỉ là hương vị tôi đang xây dựng.

FAILURE: Xây dựng không thành công với ngoại lệ.

* Đã xảy ra sự cố:

Đã xảy ra sự cố khi định cấu hình dự án ': test-app'.

Không thể giải quyết tất cả các phụ thuộc cho cấu hình ': test-app: _qaDebugCompile'.

Không thể tìm thấy 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 

Các SNAPSHOT rằng hương vị qa đang cố gắng để giải quyết chưa hề tồn tại, và rằng cần sử dụng tốt, bởi vì tôi không cố gắng xây dựng các hương vị qa. Nếu đó là SNAPSHOT xây dựng có mặt, sau đó tất cả mọi thứ hoạt động tốt.

Câu hỏi:

  1. Tại sao tất cả đều được xây dựng hương vị có sự phụ thuộc của họ được giải quyết?
  2. Làm cách nào tôi có thể thực hiện việc xây dựng chỉ một hương vị mà không gặp phải vấn đề này?
  3. Có cách nào tốt hơn để làm điều này sẽ có nhiều hơn "Gradley" không?

Trả lời

1

Cuối cùng tôi đã giải quyết vấn đề này bằng cách kiểm tra danh sách nhiệm vụ và nếu có nhiệm vụ cho biến thể xây dựng mong muốn, hãy thêm phụ thuộc.

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:[email protected]' 
     } 
    } 
    } 
    devCompile project(':localLibrary') 
//qaCompile 'com.example:my-library:[email protected]' // What I used to do. 
    rcCompile 'com.example:my-library:[email protected]' 
} 

Hãy nhớ rằng danh sách nhiệm vụ sẽ không chứa tên tác vụ phụ thuộc, vì vậy nếu bạn không gọi một tác vụ có chứa tên hương vị xây dựng, nó sẽ không hoạt động. Đây chỉ là một cái gì đó tôi đã làm việc.

0

Tôi giả định rằng công trình xây dựng hoạt động nếu bạn loại trừ tác vụ theo cách thủ công?

gradle connectedAndroidTestDevDebug -x _qaDebugCompile 

Dường như nhiệm vụ connectedAndroidTestDevDebug có một sự phụ thuộc vào nhiệm vụ _qaDebugCompile, gây ra vấn đề của bạn. Tôi không biết nhiệm vụ của bạn được xác định như thế nào, nhưng bạn có thể nghiên cứu các phụ thuộc của mình bằng cách sử dụng các tác vụ được tích hợp của Gradle gradle dependenciesgradle dependencyInsight. Có thể điều đó sẽ cung cấp cho bạn gợi ý đúng hướng:

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

Bạn có thể đọc thêm về phụ thuộc nhiệm vụ trong the gradle User's guide.

Các vấn đề liên quan