java - dependency - gradle resolve dependencies




Comment puis-je forcer Gradle à définir la même version pour deux dépendances? (6)

Ajouter cette section au fichier dependencies.gradle

configurations.all {
        resolutionStrategy { 
            force 'com.google.guava:guava:14.0.1'
            force 'com.google.guava:guava-gwt:14.0.1'
        }
    }

J'utilise les deux dépendances suivantes:

compile 'com.google.guava:guava:14.0.1'
compile 'com.google.guava:guava-gwt:14.0.1'

Les deux doivent être la même version pour fonctionner correctement. Comme mes autres dépendances utilisent une version supérieure, Gradle utilise des versions différentes pour chaque dépendance.

J'ai trouvé ceci en exécutant des gradle dependencies :

compile - Compile classpath for source set 'main'.
+--- com.google.guava:guava:14.0.1 -> 17.0
+--- com.google.guava:guava-gwt:14.0.1
|    +--- com.google.code.findbugs:jsr305:1.3.9
|    \--- com.google.guava:guava:14.0.1 -> 17.0 

Comment puis-je forcer Gradle à définir la même version pour ces deux dépendances?


J'ai eu une situation similaire où l'une des dépendances utilisait spring-web 4.2.4 qui était cassé. Vous devez forcer la version de la bibliothèque spécifique que vous voulez. Comme mentionné dans un autre commentaire, cela peut causer des problèmes de compatibilité mais est parfois nécessaire.

Le moyen le moins intrusif de forcer une version de la bibliothèque que j'ai trouvée était au lieu d'utiliser

compile "org.springframework:spring-web:4.2.3.RELEASE"

spécifiant la configuration de dépendance comme forcée:

compile("org.springframework:spring-web:4.2.3.RELEASE"){
    force = true
}

Je l'ai utilisé lorsque j'avais besoin de rétrograder temporairement la version de Spring (jusqu'à la prochaine version).


Si vous pouvez simplement utiliser la version la plus récente pour les deux dépendances, le moyen le plus simple de résoudre votre problème consiste à mettre à jour vos dépendances:

compile 'com.google.guava:guava:17.0'
compile 'com.google.guava:guava-gwt:17.0'

Cela garantira que les deux sont sur 17.0. C'est plus simple que d'essayer de forcer les deux sur l'ancienne version et, en prime, vous obtenez une version plus récente, qui vient (probablement) avec des corrections de bugs et de nouvelles fonctionnalités.

Pour être honnête, @Klunk mentionne cela dans sa réponse, en demandant "Ne pouvez-vous pas simplement utiliser la version 17.0 comme dépendance?", Mais c'est juste en passant et facile à rater, alors j'ai pensé qu'il était logique de poster séparément .


Une autre option consiste à utiliser la contrainte de dépendance: https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html#sec:dependency_constraints

dependencies {
    implementation 'org.apache.httpcomponents:httpclient'
    constraints {
        implementation('org.apache.httpcomponents:httpclient:4.5.3') {
            because 'previous versions have a bug impacting this application'
        }
        implementation('commons-codec:commons-codec:1.11') {
            because 'version 1.9 pulled from httpclient has bugs affecting this application'
        }
    }
}

Vous pouvez également utiliser le support de dependencySets (ou mavenBom lorsque BOM POM est disponible) dans le plug - in Gradle de gestion des dépendances de ressort . Notez que ce plugin est aussi automatiquement appliqué avec le plugin Gradle spring-boot . Pour plus de détails voir here .

plugins {
  id 'io.spring.dependency-management' version '1.0.1.RELEASE'
}

dependencyManagement {
  dependencies {
    dependencySet(group: 'com.google.guava', version: '14.0.1') {
      entry 'guava'
      entry 'guava-gwt'
    }
  }
}

dependencies {
  compile 'com.google.guava:guava'
  compile 'com.google.guava:guava-gwt'
}

configurations.all {
  resolutionStrategy {  
    eachDependency { DependencyResolveDetails details ->
      if (details.requested.group == 'com.google.guava') {
        details.useVersion "14.0.1"
      }
    }
  }
}

dependencies {
  compile 'com.google.guava:guava'
  compile 'com.google.guava:guava-gwt'
}




dependencies