dependencies sbt ivy

dependencies - Manera recomendada para forzar una versión específica de la dependencia SBT



ivy (1)

Una bar dependencia depende de foo 1.2.3, pero esa versión de foo tiene un error y necesito usar la versión 1.2.2.

Puedo hacer eso con force() .

libraryDependencies += "foo" %% "foo" % "1.2.2" force()

Ese método no es recomendado por los docs :

Forzando una revisión (No recomendado)

Nota: Forzar puede crear inconsistencias lógicas por lo que ya no se recomienda.

¿Significa esto que SBT tiene una forma diferente y mejor que force() para usar una versión específica de una dependencia? ¿Entonces qué?

¿O debo inferir de la documentación que todo este problema es uno que me recomiendan que no tenga?


puede utilizar dependencyOverrides :

dependencyOverrides += "foo" %% "foo" % "1.2.2"

No estás evitando "inconsistencias lógicas" de todos modos. Si fuerza una versión, tiene que hacerse cargo manualmente de la compatibilidad con otras bibliotecas, no hay forma de salir de eso.

De la documentación:

Anulando una versión

Para conflictos binarios compatibles, sbt proporciona reemplazos de dependencia. Se configuran con la configuración dependencyOverrides, que es un conjunto de ModuleIDs. Por ejemplo, las siguientes definiciones de dependencia entran en conflicto porque spark utiliza log4j 1.2.16 y scalaxb usa log4j 1.2.17:

libraryDependencies ++= Seq( "org.spark-project" %% "spark-core" % "0.5.1", "org.scalaxb" %% "scalaxb" % "1.0.0" )

El administrador de conflictos predeterminado elige la última revisión de log4j, 1.2.17:

show update [info] compile: [info] log4j:log4j:1.2.17: ... ... [info] (EVICTED) log4j:log4j:1.2.16 ...

Para cambiar la versión seleccionada, agregue un reemplazo:

dependencyOverrides += "log4j" % "log4j" % "1.2.16"