2

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 }

ただし、依存関係をグループ化したい場合は、依存関係ごとにプロパティを指定する必要があります。

これで機能する構文の提案はありますか?

4

2 に答える 2

5

まず、宣言を単純化 (または少なくとも短縮) する方法があります。例えば:

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

または:

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
    }
}
于 2012-05-11T17:43:44.963 に答える
3

個別の構成を作成し、目的の構成で推移的な = 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
}

上記により、ログ関連リソースの推移的な依存関係を無効にすることができますが、Apache 構成にデフォルトの推移的な = true が適用されています。

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 を使用していますが、推移的な false と true の両方を使用する場合、依存関係を示す限り問題なく動作します。

上記の方法を使用して推移性を true にすると、75 の依存関係があり、推移性が false の場合は 64 のアクティブなプロジェクトがあります。

同様のチェックを行い、ビルド成果物をチェックする価値があります。

于 2012-05-12T02:28:07.367 に答える