use Relaxed reconciliation strategy by default

Fixes #4720
Ref https://github.com/coursier/coursier/pull/1293
Ref https://github.com/coursier/sbt-coursier/pull/112
This commit is contained in:
Eugene Yokota 2019-08-04 01:16:42 -04:00
parent a22e4889f4
commit 46e92949ed
5 changed files with 26 additions and 11 deletions

View File

@ -249,6 +249,7 @@ object Defaults extends BuildCommon {
csrLogger := LMCoursier.coursierLoggerTask.value, csrLogger := LMCoursier.coursierLoggerTask.value,
csrCacheDirectory :== LMCoursier.defaultCacheLocation, csrCacheDirectory :== LMCoursier.defaultCacheLocation,
csrMavenProfiles :== Set.empty, csrMavenProfiles :== Set.empty,
csrReconciliations :== LMCoursier.relaxedForAllModules,
) )
/** Core non-plugin settings for sbt builds. These *must* be on every build or the sbt engine will fail to run at all. */ /** Core non-plugin settings for sbt builds. These *must* be on every build or the sbt engine will fail to run at all. */

View File

@ -10,7 +10,7 @@ package sbt
import java.io.File import java.io.File
import java.net.URL import java.net.URL
import lmcoursier.definitions.CacheLogger import lmcoursier.definitions.{ CacheLogger, ModuleMatchers, Reconciliation }
import lmcoursier.{ CoursierConfiguration, FallbackDependency } import lmcoursier.{ CoursierConfiguration, FallbackDependency }
import org.apache.ivy.core.module.descriptor.ModuleDescriptor import org.apache.ivy.core.module.descriptor.ModuleDescriptor
import org.apache.ivy.core.module.id.ModuleRevisionId import org.apache.ivy.core.module.id.ModuleRevisionId
@ -339,6 +339,7 @@ object Keys {
val csrLogger = taskKey[Option[CacheLogger]]("") val csrLogger = taskKey[Option[CacheLogger]]("")
val csrExtraCredentials = taskKey[Seq[lmcoursier.credentials.Credentials]]("") val csrExtraCredentials = taskKey[Seq[lmcoursier.credentials.Credentials]]("")
val csrPublications = taskKey[Seq[(lmcoursier.definitions.Configuration, lmcoursier.definitions.Publication)]]("") val csrPublications = taskKey[Seq[(lmcoursier.definitions.Configuration, lmcoursier.definitions.Publication)]]("")
val csrReconciliations = settingKey[Seq[(ModuleMatchers, Reconciliation)]]("Strategy to reconcile version conflicts.")
val internalConfigurationMap = settingKey[Configuration => Configuration]("Maps configurations to the actual configuration used to define the classpath.").withRank(CSetting) val internalConfigurationMap = settingKey[Configuration => Configuration]("Maps configurations to the actual configuration used to define the classpath.").withRank(CSetting)
val classpathConfiguration = taskKey[Configuration]("The configuration used to define the classpath.").withRank(CTask) val classpathConfiguration = taskKey[Configuration]("The configuration used to define the classpath.").withRank(CTask)

View File

@ -13,15 +13,16 @@ import sbt.librarymanagement._
import sbt.util.Logger import sbt.util.Logger
import sbt.Keys._ import sbt.Keys._
import lmcoursier.definitions.{ import lmcoursier.definitions.{
Attributes => CAttributes,
Classifier => CClassifier, Classifier => CClassifier,
Configuration => CConfiguration, Configuration => CConfiguration,
Dependency => CDependency, Dependency => CDependency,
Extension => CExtension,
Info => CInfo, Info => CInfo,
Module => CModule, Module => CModule,
ModuleName => CModuleName, ModuleName => CModuleName,
Organization => COrganization, Organization => COrganization,
Project => CProject, Project => CProject,
Publication => CPublication,
Type => CType Type => CType
} }
import lmcoursier.credentials.DirectCredentials import lmcoursier.credentials.DirectCredentials
@ -108,33 +109,34 @@ object CoursierInputsTasks {
val configurations = desc.getModuleConfigurations.toVector val configurations = desc.getModuleConfigurations.toVector
.flatMap(Inputs.ivyXmlMappings) .flatMap(Inputs.ivyXmlMappings)
def dependency(conf: CConfiguration, attr: CAttributes) = CDependency( def dependency(conf: CConfiguration, pub: CPublication) = CDependency(
module, module,
id.getRevision, id.getRevision,
conf, conf,
exclusions, exclusions,
attr, pub,
optional = false, optional = false,
desc.isTransitive desc.isTransitive
) )
val attributes: CConfiguration => CAttributes = { val publications: CConfiguration => CPublication = {
val artifacts = desc.getAllDependencyArtifacts val artifacts = desc.getAllDependencyArtifacts
val m = artifacts.toVector.flatMap { art => val m = artifacts.toVector.flatMap { art =>
val attr = CAttributes(CType(art.getType), CClassifier("")) val pub =
CPublication(art.getName, CType(art.getType), CExtension(art.getExt()), CClassifier(""))
art.getConfigurations.map(CConfiguration(_)).toVector.map { conf => art.getConfigurations.map(CConfiguration(_)).toVector.map { conf =>
conf -> attr conf -> pub
} }
}.toMap }.toMap
c => m.getOrElse(c, CAttributes(CType(""), CClassifier(""))) c => m.getOrElse(c, CPublication("", CType(""), CExtension(""), CClassifier("")))
} }
configurations.map { configurations.map {
case (from, to) => case (from, to) =>
from -> dependency(to, attributes(to)) from -> dependency(to, publications(to))
} }
} }

View File

@ -14,7 +14,9 @@ import lmcoursier.definitions.{
Classifier, Classifier,
Configuration => CConfiguration, Configuration => CConfiguration,
CacheLogger, CacheLogger,
Project => CProject Project => CProject,
ModuleMatchers,
Reconciliation,
} }
import lmcoursier._ import lmcoursier._
import lmcoursier.credentials.Credentials import lmcoursier.credentials.Credentials
@ -40,6 +42,9 @@ object LMCoursier {
case _ => CoursierDependencyResolution.defaultCacheLocation case _ => CoursierDependencyResolution.defaultCacheLocation
} }
def relaxedForAllModules: Seq[(ModuleMatchers, Reconciliation)] =
Vector((ModuleMatchers.all, Reconciliation.Relaxed))
def coursierConfiguration( def coursierConfiguration(
rs: Seq[Resolver], rs: Seq[Resolver],
interProjectDependencies: Seq[CProject], interProjectDependencies: Seq[CProject],
@ -56,6 +61,7 @@ object LMCoursier {
credentials: Seq[Credentials], credentials: Seq[Credentials],
createLogger: Option[CacheLogger], createLogger: Option[CacheLogger],
cacheDirectory: File, cacheDirectory: File,
reconciliation: Seq[(ModuleMatchers, Reconciliation)],
log: Logger log: Logger
): CoursierConfiguration = { ): CoursierConfiguration = {
val coursierExcludeDeps = Inputs val coursierExcludeDeps = Inputs
@ -96,6 +102,7 @@ object LMCoursier {
.withCredentials(credentials) .withCredentials(credentials)
.withLogger(createLogger) .withLogger(createLogger)
.withCache(cacheDirectory) .withCache(cacheDirectory)
.withReconciliation(reconciliation.toVector)
.withLog(log) .withLog(log)
} }
@ -116,6 +123,7 @@ object LMCoursier {
CoursierInputsTasks.credentialsTask.value, CoursierInputsTasks.credentialsTask.value,
csrLogger.value, csrLogger.value,
csrCacheDirectory.value, csrCacheDirectory.value,
csrReconciliations.value,
streams.value.log streams.value.log
) )
} }
@ -137,6 +145,7 @@ object LMCoursier {
CoursierInputsTasks.credentialsTask.value, CoursierInputsTasks.credentialsTask.value,
csrLogger.value, csrLogger.value,
csrCacheDirectory.value, csrCacheDirectory.value,
csrReconciliations.value,
streams.value.log streams.value.log
) )
} }
@ -158,6 +167,7 @@ object LMCoursier {
CoursierInputsTasks.credentialsTask.value, CoursierInputsTasks.credentialsTask.value,
csrLogger.value, csrLogger.value,
csrCacheDirectory.value, csrCacheDirectory.value,
csrReconciliations.value,
streams.value.log streams.value.log
) )
} }
@ -179,6 +189,7 @@ object LMCoursier {
CoursierInputsTasks.credentialsTask.value, CoursierInputsTasks.credentialsTask.value,
csrLogger.value, csrLogger.value,
csrCacheDirectory.value, csrCacheDirectory.value,
csrReconciliations.value,
streams.value.log streams.value.log
) )
} }

View File

@ -112,7 +112,7 @@ object Dependencies {
def addSbtZincCompileCore(p: Project): Project = def addSbtZincCompileCore(p: Project): Project =
addSbtModule(p, sbtZincPath, "zincCompileCore", zincCompileCore) addSbtModule(p, sbtZincPath, "zincCompileCore", zincCompileCore)
val lmCoursierVersion = "2.0.0-RC3" val lmCoursierVersion = "2.0.0-RC3-2"
val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % lmCoursierVersion val lmCoursierShaded = "io.get-coursier" %% "lm-coursier-shaded" % lmCoursierVersion
val sjsonNewScalaJson = Def.setting { val sjsonNewScalaJson = Def.setting {