web-dev-qa-db-ja.com

Gradle:バージョン分類子による推移的な依存関係のオーバーライド

私のプロジェクトで宣言された依存関係の1つは、'com.google.guava:guava:15.0'に推移的な依存関係があります。しかし、'com.google.guava:guava:15.0:cdi1.0'で修正されたCDIの問題により、WAS/Weblogicにデプロイされたアプリケーションは機能しません。 (同じバージョンですが、分類子を使用)ビルドおよびパッケージング中にこのjarを使用するようにgradleに指示する必要があります。 jar固有のバージョン分類子を使用して、この推移的な依存関係をどのように理解できるかを考えています。

次のアプローチを試みました:

  1. 依存関係を明示的に追加しました:compile 'com.google.guava:guava:15.0:cdi1.0'。しかし、両方のjarが結果のWARに含まれました。
  2. 依存関係を明示的に追加し、解決戦略を定義しました。

    configurations.all {
        resolutionStrategy {
            force 'com.google.guava:guava:15.0:cdi1.0'
        }
    }
    

    これでもうまくいきませんでした。

  3. バージョンを確認および変更する解決戦略を定義しました。

    configurations.all {
         resolutionStrategy.eachDependency { DependencyResolveDetails details ->
             if (details.requested.group + ":" + details.requested.name == 'com.google.guava:guava') {
                details.useVersion "15.0:cdi1.0"
                //details.useTarget "com.google.guava:guava:15.0:cdi1.0"
            }
        }
    }
    

    これでもうまくいきませんでした。

この問題にどのように取り組むことができるかについての提案が必要です。

42
dinup24

現在、resolutionStrategiesに関しては、分類子はまだ考慮されていません。依存関係を宣言し、guava cdi1.0バージョンを明示的に追加する場合、推移的なguava libを除外する回避策があります。

dependencies {
    compile ("org.acme:someDependency:1.0"){
        exclude group: 'com.google.guava', module: 'guava'
    }       
    compile "com.google.guava:guava:15.0:cdi1.0"
}
51
Rene Groeschke

もっとエレガントなアプローチに出会いました。

compile ("com.google.guava:guava:15.0:cdi1.0") {
  force = true
}

説明

設定force = true依存関係の場合、バージョンの競合の場合に指定されたバージョンを使用するようにgradleに指示します

22
Sobvan

Gradle 4.5.1には、関数 DependencySubstitutions があります。依存関係を置き換える例:

configurations.each {
    c -> c.resolutionStrategy.dependencySubstitution {
        all { DependencySubstitution dependency ->
            if (dependency.requested.group == 'org.json') {
                dependency.useTarget 'com.vaadin.external.google:Android-json:0.0.20131108.vaadin1'
            }
        }
    }
}
5
koppor

同じ依存関係が他のjarによってポイントされている場合、これは機能しません。依存関係を除外する確実な方法

configurations {
 all*.exclude group: 'com.google.guava', module:'guava-jdk5'
}
2