2016-05-27 3 views
0

есть лучший способ объявить несколько пакетов (например, «appcompat-v7») из той же группы (например, «com.android.support») с той же версией (например, «23 .4.0»)?DRY, есть ли лучшая декларация зависимости градиента?

фактическое объявление:

... 
def androidSupport = '23.4.0' 
def rxBinding = '0.4.0' 

dependencies { 
    ... 

    // android support 
    compile "com.android.support:appcompat-v7:$androidSupport" 
    compile "com.android.support:design:$androidSupport" 
    compile "com.android.support:percent:$androidSupport" 

    // rxJava 
    compile "com.jakewharton.rxbinding:rxbinding:$rxBinding" 
    compile "com.jakewharton.rxbinding:rxbinding-support-v4:$rxBinding" 
    compile "com.jakewharton.rxbinding:rxbinding-appcompat-v7:$rxBinding" 
    compile "com.jakewharton.rxbinding:rxbinding-design:$rxBinding" 
    compile "com.jakewharton.rxbinding:rxbinding-recyclerview-v7:$rxBinding" 
... 

это можно сделать что-то подобное ?:

... 
compile(group: 'com.android.support', version: '23.4.0') { 
    modules: "appcompat-v7", "design", "percent" 
} 
... 

ответ

2

После того, как вы понимаете, что Gradle построить сценарий просто Groovy скрипт, который означает, что каждый из эти «компилируемые» строки - это просто вызовы методов, вы начинаете видеть много возможностей.

Например, укажите «inline» массив имен артефактов, назовите «each()» на этом и пропустите закрытие, которое указывает «compile group:$it:$version» (или что-то в этом роде).

+0

thx для напоминания! – polmabri

1
def multiArtifactDependency = { String group, String version, List<String> artifacts -> artifacts.each { compile "${group}:${it}:${version}" } } 

multiArtifactDependency('com.android.support', '23.3.0', ['appcompat-v7', 'design']) 
multiArtifactDependency('com.squareup.retrofit2', '2.0.2', ['retrofit', 'converter-gson', 'adapter-rxjava'])