Как да посочите свойства на групи зависимости в Gradle?

Използвайки Gradle, бих искал да мога да деактивирам транзитивността на една група зависимости, като същевременно разрешавам на други. Нещо като това:

// transitivity enabled
compile(
  [group: 'log4j', name: 'log4j', version: '1.2.16'],
  [group: 'commons-beanutils', name: 'commons-beanutils', version: '1.7.0']
)

// transitivity disabled
compile(
  [group: 'commons-collections', name: 'commons-collections', version: '3.2.1'],
  [group: 'commons-lang', name: 'commons-lang', version: '2.6'],
) { 
  transitive = false
}

Gradle няма да приеме този синтаксис. Мога да го накарам да работи, ако направя следното:

compile(group: 'commons-collections', name: 'commons-collections', version: '3.2.1') { transitive = false }
compile(group: 'commons-lang', name: 'commons-lang', version: '2.6']) { transitive = false }

Но това изисква от мен да посоча свойството за всяка зависимост, когато предпочитам да ги групирам заедно.

Някой има ли предложение за синтаксис, който ще работи по този въпрос?


person Ryan Nelson    schedule 11.05.2012    source източник


Отговори (2)


Първо, има начини да опростите (или поне да съкратите) вашите декларации. Например:

compile 'commons-collections:commons-collections:3.2.1@jar'
compile 'commons-lang:commons-lang:2.6@jar'

Or:

def nonTransitive = { transitive = false }

compile 'commons-collections:commons-collections:3.2.1', nonTransitive
compile 'commons-lang:commons-lang:2.6', nonTransitive

За да създадете, конфигурирате и добавите множество зависимости наведнъж, ще трябва да въведете малко абстракция. Нещо като:

def deps(String... notations, Closure config) { 
    def deps = notations.collect { project.dependencies.create(it) }
    project.configure(deps, config)
}

dependencies {
    compile deps('commons-collections:commons-collections:3.2.1', 
            'commons-lang:commons-lang:2.6') { 
        transitive = false
    }
}
person Peter Niederwieser    schedule 11.05.2012

Създайте отделни конфигурации и задайте transitive = false на желаната конфигурация. В зависимостите просто включете конфигурации в компилиране или всяка друга конфигурация, към която принадлежат

configurations {
    apache
    log {
        transitive = false
        visible = false //mark them private configuration if you need to
    }
}

dependencies {
    apache 'commons-collections:commons-collections:3.2.1'
    log 'log4j:log4j:1.2.16'

    compile configurations.apache
    compile configurations.log
}

Горното ми позволява да деактивирам транзитивните зависимости за ресурси, свързани с регистрационни файлове, докато имам по подразбиране transitive = true, приложено за конфигурация на apache.

Редактирано по-долу според коментара на tair:

ще се оправи ли това?

//just to show all configurations and setting transtivity to false
configurations.all.each { config->
    config.transitive = true
    println config.name + ' ' + config.transitive
}

и стартирайте зависимостите на gradle

за да видите зависимостите. Използвам Gradle-1.0 и той се държи добре, що се отнася до показването на зависимостите, когато използвам както транзитивно невярно, така и истинско.

Имам активен проект, при който при превръщане на транзитивно в истинско, използвайки горния метод, имам 75 зависимости и имам 64, когато е преходно в невярно.

струва си да направите подобна проверка с и да проверите артефактите за изграждане.

person skipy    schedule 12.05.2012