diff --git a/core/util/src/mill/util/Jvm.scala b/core/util/src/mill/util/Jvm.scala index 80f756423a4..4f2874ba3d1 100644 --- a/core/util/src/mill/util/Jvm.scala +++ b/core/util/src/mill/util/Jvm.scala @@ -466,7 +466,6 @@ object Jvm { force: IterableOnce[Dependency] = Nil, checkGradleModules: Boolean, sources: Boolean = false, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[Resolution => Resolution] = None, ctx: Option[mill.define.TaskCtx] = None, coursierCacheCustomizer: Option[FileCache[Task] => FileCache[Task]] = None, @@ -478,7 +477,6 @@ object Jvm { deps, force, checkGradleModules, - mapDependencies, customizer, ctx, coursierCacheCustomizer, @@ -529,7 +527,6 @@ object Jvm { force: IterableOnce[Dependency], checkGradleModules: Boolean, sources: Boolean = false, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[Resolution => Resolution] = None, ctx: Option[mill.define.TaskCtx] = None, coursierCacheCustomizer: Option[FileCache[Task] => FileCache[Task]] = None, @@ -542,7 +539,6 @@ object Jvm { force, checkGradleModules, sources, - mapDependencies, customizer, ctx, coursierCacheCustomizer, @@ -630,7 +626,6 @@ object Jvm { deps: IterableOnce[Dependency], force: IterableOnce[Dependency], checkGradleModules: Boolean, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[Resolution => Resolution] = None, ctx: Option[mill.define.TaskCtx] = None, coursierCacheCustomizer: Option[FileCache[Task] => FileCache[Task]] = None, @@ -638,12 +633,9 @@ object Jvm { boms: IterableOnce[BomDependency] = Nil ): Result[Resolution] = { - val rootDeps = deps.iterator - .map(d => mapDependencies.fold(d)(_.apply(d))) - .toSeq + val rootDeps = deps.iterator.toSeq val forceVersions = force.iterator - .map(mapDependencies.getOrElse(identity[Dependency](_))) .map { d => d.module -> d.version } .toMap @@ -682,7 +674,6 @@ object Jvm { .withDependencies(rootDeps) .withRepositories(Seq(resourceTestOverridesRepo) ++ envTestOverridesRepo ++ repositories0) .withResolutionParams(resolutionParams0) - .withMapDependenciesOpt(mapDependencies) .withBoms(boms.iterator.toSeq) resolve.either() match { diff --git a/libs/scalalib/src/mill/scalalib/CoursierModule.scala b/libs/scalalib/src/mill/scalalib/CoursierModule.scala index 4e53358f539..8dface26a3c 100644 --- a/libs/scalalib/src/mill/scalalib/CoursierModule.scala +++ b/libs/scalalib/src/mill/scalalib/CoursierModule.scala @@ -47,7 +47,6 @@ trait CoursierModule extends mill.define.Module { new CoursierModule.Resolver( repositories = allRepositories(), bind = bindDependency(), - mapDependencies = Some(mapDependencies()), customizer = resolutionCustomizer(), coursierCacheCustomizer = coursierCacheCustomizer(), resolutionParams = resolutionParams(), @@ -68,7 +67,6 @@ trait CoursierModule extends mill.define.Module { new CoursierModule.Resolver( repositories = repositoriesTask(), bind = bindDependency(), - mapDependencies = Some(mapDependencies()), customizer = resolutionCustomizer(), coursierCacheCustomizer = coursierCacheCustomizer(), resolutionParams = resolutionParams(), @@ -77,12 +75,6 @@ trait CoursierModule extends mill.define.Module { ) } - /** - * Map dependencies before resolving them. - * Override this to customize the set of dependencies. - */ - def mapDependencies: Task[Dependency => Dependency] = Task.Anon { (d: Dependency) => d } - /** * Mill internal repositories to be used during dependency resolution * @@ -203,7 +195,6 @@ object CoursierModule { repositories: Seq[Repository], bind: Dep => BoundDep, checkGradleModules: Boolean, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[coursier.core.Resolution => coursier.core.Resolution] = None, coursierCacheCustomizer: Option[ coursier.cache.FileCache[coursier.util.Task] => coursier.cache.FileCache[coursier.util.Task] @@ -222,8 +213,7 @@ object CoursierModule { deps: IterableOnce[T], sources: Boolean = false, artifactTypes: Option[Set[coursier.Type]] = None, - resolutionParamsMapOpt: Option[ResolutionParams => ResolutionParams] = None, - mapDependencies: Option[Dependency => Dependency] = null + resolutionParamsMapOpt: Option[ResolutionParams => ResolutionParams] = None )(implicit ctx: mill.define.TaskCtx): Seq[PathRef] = Lib.resolveDependencies( repositories = repositories, @@ -231,7 +221,6 @@ object CoursierModule { checkGradleModules = checkGradleModules, sources = sources, artifactTypes = artifactTypes, - mapDependencies = Option(mapDependencies).getOrElse(this.mapDependencies), customizer = customizer, coursierCacheCustomizer = coursierCacheCustomizer, ctx = Some(ctx), @@ -254,7 +243,6 @@ object CoursierModule { repositories = repositories, deps = deps0, checkGradleModules = checkGradleModules, - mapDependencies = mapDependencies, customizer = customizer, coursierCacheCustomizer = coursierCacheCustomizer, ctx = Some(ctx), diff --git a/libs/scalalib/src/mill/scalalib/JavaModule.scala b/libs/scalalib/src/mill/scalalib/JavaModule.scala index acba640822f..ff8220c7e26 100644 --- a/libs/scalalib/src/mill/scalalib/JavaModule.scala +++ b/libs/scalalib/src/mill/scalalib/JavaModule.scala @@ -1137,7 +1137,6 @@ trait JavaModule allRepositories(), dependencies, checkGradleModules = checkGradleModules(), - Some(mapDependencies()), customizer = resolutionCustomizer(), coursierCacheCustomizer = coursierCacheCustomizer(), resolutionParams = resolutionParams() diff --git a/libs/scalalib/src/mill/scalalib/JvmWorkerModule.scala b/libs/scalalib/src/mill/scalalib/JvmWorkerModule.scala index 1c9651fcafe..3dc1b8eebc6 100644 --- a/libs/scalalib/src/mill/scalalib/JvmWorkerModule.scala +++ b/libs/scalalib/src/mill/scalalib/JvmWorkerModule.scala @@ -153,7 +153,7 @@ trait JvmWorkerModule extends OfflineSupportModule with CoursierModule { val deps = resolver.classpath( Seq(bridgeDep.bindDep("", "", "")), sources = useSources, - mapDependencies = Some(overrideScalaLibrary(scalaVersion, scalaOrganization)) + resolutionParamsMapOpt = Some(overrideScalaLibrary(scalaVersion, scalaOrganization)) ) val bridgeJar = JvmWorkerUtil.grepJar(deps, bridgeName, bridgeVersion, useSources) @@ -173,19 +173,25 @@ trait JvmWorkerModule extends OfflineSupportModule with CoursierModule { deps = Seq(mvn"org.scala-sbt:compiler-interface:${Versions.zinc}".bindDep("", "", "")), // Since Zinc 1.4.0, the compiler-interface depends on the Scala library // We need to override it with the scalaVersion and scalaOrganization of the module - mapDependencies = Some(overrideScalaLibrary(scalaVersion, scalaOrganization)) + resolutionParamsMapOpt = Some(overrideScalaLibrary(scalaVersion, scalaOrganization)) ) } def overrideScalaLibrary( scalaVersion: String, scalaOrganization: String - )(dep: coursier.Dependency): coursier.Dependency = { - if (dep.module.name.value == "scala-library") { - dep.withModule(dep.module.withOrganization(coursier.Organization(scalaOrganization))) - .withVersion(scalaVersion) - } else dep - } + ): coursier.params.ResolutionParams => coursier.params.ResolutionParams = + params => + params + .withTypelevel(scalaOrganization == "org.typelevel") + .addForceVersion0( + coursier.Module( + coursier.Organization(scalaOrganization), + coursier.ModuleName("scala-library"), + Map.empty + ) -> + coursier.version.VersionConstraint(scalaVersion) + ) override def prepareOffline(all: Flag): Command[Seq[PathRef]] = Task.Command { ( diff --git a/libs/scalalib/src/mill/scalalib/Lib.scala b/libs/scalalib/src/mill/scalalib/Lib.scala index 4fe1e2e54ca..c8ed72188ac 100644 --- a/libs/scalalib/src/mill/scalalib/Lib.scala +++ b/libs/scalalib/src/mill/scalalib/Lib.scala @@ -29,7 +29,6 @@ object Lib { repositories: Seq[Repository], deps: IterableOnce[BoundDep], checkGradleModules: Boolean, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[coursier.core.Resolution => coursier.core.Resolution] = None, ctx: Option[TaskCtx] = None, coursierCacheCustomizer: Option[ @@ -44,7 +43,6 @@ object Lib { deps = depSeq.map(_.dep), force = depSeq.filter(_.force).map(_.dep), checkGradleModules = checkGradleModules, - mapDependencies = mapDependencies, customizer = customizer, ctx = ctx, coursierCacheCustomizer = coursierCacheCustomizer, @@ -65,7 +63,6 @@ object Lib { deps: IterableOnce[BoundDep], checkGradleModules: Boolean, sources: Boolean = false, - mapDependencies: Option[Dependency => Dependency] = None, customizer: Option[coursier.core.Resolution => coursier.core.Resolution] = None, ctx: Option[TaskCtx] = None, coursierCacheCustomizer: Option[ @@ -82,7 +79,6 @@ object Lib { checkGradleModules = checkGradleModules, sources = sources, artifactTypes = artifactTypes, - mapDependencies = mapDependencies, customizer = customizer, ctx = ctx, coursierCacheCustomizer = coursierCacheCustomizer, diff --git a/libs/scalalib/src/mill/scalalib/ScalaModule.scala b/libs/scalalib/src/mill/scalalib/ScalaModule.scala index 321384133a9..a159d9ac87d 100644 --- a/libs/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/libs/scalalib/src/mill/scalalib/ScalaModule.scala @@ -65,24 +65,27 @@ trait ScalaModule extends JavaModule with TestModule.ScalaModuleBase */ def scalaVersion: T[String] - override def mapDependencies: Task[coursier.Dependency => coursier.Dependency] = Task.Anon { - super.mapDependencies().andThen { (d: coursier.Dependency) => - val artifacts = - if (JvmWorkerUtil.isDotty(scalaVersion())) - Set("dotty-library", "dotty-compiler") - else if (JvmWorkerUtil.isScala3(scalaVersion())) - Set("scala3-library", "scala3-compiler") - else - Set("scala-library", "scala-compiler", "scala-reflect") - if (!artifacts(d.module.name.value)) d + override def resolutionParams: Task[coursier.params.ResolutionParams] = Task.Anon { + val isTypelevelScala = scalaOrganization() == "org.typelevel" + val scalaModuleNames = + if (JvmWorkerUtil.isDotty(scalaVersion())) + Seq("dotty-library", "dotty-compiler") + else if (JvmWorkerUtil.isScala3(scalaVersion())) + Seq("scala3-library", "scala3-compiler") else - d.withModule( - d.module.withOrganization( - coursier.Organization(scalaOrganization()) - ) - ) - .withVersion(scalaVersion()) + Seq("scala-library", "scala-compiler", "scala-reflect") + val constraint = coursier.version.VersionConstraint(scalaVersion()) + val forced = scalaModuleNames.map { name => + val mod = coursier.core.Module( + coursier.core.Organization(scalaOrganization()), + coursier.core.ModuleName(name), + Map.empty + ) + (mod, constraint) } + super.resolutionParams() + .withTypelevel(isTypelevelScala) + .addForceVersion0(forced*) } def bindDependency: Task[Dep => BoundDep] = Task.Anon { (dep: Dep) => diff --git a/libs/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala b/libs/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala index dd5d10da257..257464054d7 100644 --- a/libs/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala +++ b/libs/scalalib/src/mill/scalalib/dependency/versions/VersionsFinder.scala @@ -56,7 +56,6 @@ private[dependency] object VersionsFinder { val compileMvnDeps = javaModule.compileMvnDeps() val runMvnDeps = javaModule.runMvnDeps() val repos = javaModule.repositoriesTask() - val mapDeps = javaModule.mapDependencies() val custom = javaModule.resolutionCustomizer() val cacheCustom = javaModule.coursierCacheCustomizer() @@ -70,7 +69,6 @@ private[dependency] object VersionsFinder { val x = Lib.resolveDependenciesMetadataSafe( repositories = repos, deps = dependencies: IterableOnce[BoundDep], - mapDependencies = Option(mapDeps), customizer = custom, ctx = Option(Task.ctx()), coursierCacheCustomizer = cacheCustom, diff --git a/mill-build/src/millbuild/MillJavaModule.scala b/mill-build/src/millbuild/MillJavaModule.scala index e7290509e24..90113bf5681 100644 --- a/mill-build/src/millbuild/MillJavaModule.scala +++ b/mill-build/src/millbuild/MillJavaModule.scala @@ -59,24 +59,12 @@ trait MillJavaModule extends JavaModule { Seq(MavenRepository("https://oss.sonatype.org/content/repositories/releases")) } - def mapDependencies: Task[coursier.Dependency => coursier.Dependency] = Task.Anon { - super.mapDependencies().andThen { dep => - forcedVersions.find(f => - f.dep.module.organization.value == dep.module.organization.value && - f.dep.module.name.value == dep.module.name.value - ).map { forced => - val newDep = dep.withVersionConstraint(VersionConstraint(forced.version)) - Task.log.debug( - s"Forcing version of ${dep.module} from ${dep.versionConstraint.asString} to ${newDep.versionConstraint.asString}" - ) - newDep - }.getOrElse(dep) - } + def resolutionParams: Task[coursier.params.ResolutionParams] = Task.Anon { + super.resolutionParams().addForceVersion0( + Deps.jline.dep.module -> Deps.jline.dep.versionConstraint, + Deps.jna.dep.module -> Deps.jna.dep.versionConstraint + ) } - val forcedVersions: Seq[Dep] = Deps.transitiveDeps ++ Seq( - Deps.jline, - Deps.jna - ) def javadocOptions = super.javadocOptions() ++ Seq( // Disable warnings for missing documentation comments or tags (for example,