L'une des dépendances déclarées dans mon projet a une dépendance transitive sur 'com.google.guava:guava:15.0'
. Mais mon application déployée sur WAS/Weblogic ne fonctionne pas en raison d'un problème CDI qui a été corrigé dans 'com.google.guava:guava:15.0:cdi1.0'
. (même version, mais avec classificateur) J'ai besoin de dire à gradle d'utiliser ce pot pendant la construction et l'empaquetage. J'essaie de comprendre comment nous pouvons contourner cette dépendance transitive avec un classificateur de version spécifique au pot.
J'ai essayé les approches suivantes:
compile 'com.google.guava:guava:15.0:cdi1.0'
. Mais les deux pots ont été inclus dans la GUERRE résultante.Ajout de la dépendance explicitement et définition d'une stratégie de résolution:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0:cdi1.0'
}
}
Même cela n'a pas fonctionné.
Définition d'une stratégie de résolution pour vérifier et changer la version.
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"
}
}
}
Même cela n'a pas fonctionné.
Besoin de vos suggestions sur la façon de résoudre ce problème.
actuellement, les classificateurs ne sont pas encore pris en compte en ce qui concerne les stratégies de résolution. Une solution de contournement pour vous pourrait exclure la bibliothèque de goyaves transitive lors de la déclaration de vos dépendances et de l'ajout explicite de la version cava1.0 de goyave:
dependencies {
compile ("org.acme:someDependency:1.0"){
exclude group: 'com.google.guava', module: 'guava'
}
compile "com.google.guava:guava:15.0:cdi1.0"
}
Je suis tombé sur une approche plus élégante qui est tout simplement:
compile ("com.google.guava:guava:15.0:cdi1.0") {
force = true
}
Réglage force = true
pour une dépendance indique à gradle d'utiliser la version spécifiée en cas de conflit de version
Gradle 4.5.1 a la fonction DependencySubstitutions . Voici un exemple pour remplacer une dépendance:
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'
}
}
}
}
Cela ne fonctionnera pas si la même dépendance est pointée par un autre pot. Manière sûre d'exclure la dépendance
configurations {
all*.exclude group: 'com.google.guava', module:'guava-jdk5'
}