From cd373c99ad730f9daacf3dd378aa71dfe7b1dcd7 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 25 Dec 2015 23:20:56 -0500 Subject: [PATCH] Add useJCenter setting, which is set to false. Fixes #2217 Adds a new setting `useJCenter`, which is set to `false` by default. When set to `true`, JCenter will be placed as the first external resolver to find library dependencies. The implementation of `externalResolvers` is changed to incorporate the setting by calling `Resolver.reorganizeAppResolvers`. These changes were required because `externalResolvers` uses whatever that's in the launchconfig, which the build user may not upgrade. --- main/src/main/scala/sbt/Defaults.scala | 9 +++++---- main/src/main/scala/sbt/Keys.scala | 1 + notes/0.13.10/make-JCenter-opt-in.markdown | 7 +++++++ .../default-resolvers/build.sbt | 16 ++++++++++++++++ .../dependency-management/default-resolvers/test | 5 +++++ 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 notes/0.13.10/make-JCenter-opt-in.markdown create mode 100644 sbt/src/sbt-test/dependency-management/default-resolvers/build.sbt create mode 100644 sbt/src/sbt-test/dependency-management/default-resolvers/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 2860c67d8..519467705 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1148,6 +1148,7 @@ object Classpaths { moduleConfigurations :== Nil, publishTo :== None, resolvers :== Nil, + useJCenter :== false, retrievePattern :== Resolver.defaultRetrievePattern, transitiveClassifiers :== Seq(SourceClassifier, DocClassifier), sourceArtifactTypes :== Artifact.DefaultSourceTypes, @@ -1174,10 +1175,10 @@ object Classpaths { organizationHomepage <<= organizationHomepage or homepage, projectInfo <<= (name, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, developers) apply ModuleInfo, overrideBuildResolvers <<= appConfiguration(isOverrideRepositories), - externalResolvers <<= (externalResolvers.task.?, resolvers, appResolvers) { - case (Some(delegated), Seq(), _) => delegated - case (_, rs, Some(ars)) => task { ars ++ rs } // TODO - Do we need to filter out duplicates? - case (_, rs, _) => task { Resolver.withDefaultResolvers(rs) } + externalResolvers <<= (externalResolvers.task.?, resolvers, appResolvers, useJCenter) { + case (Some(delegated), Seq(), _, _) => delegated + case (_, rs, Some(ars), uj) => task { ars ++ Resolver.reorganizeAppResolvers(rs, uj, true) } + case (_, rs, _, uj) => task { Resolver.withDefaultResolvers(rs, uj) } }, appResolvers <<= appConfiguration apply appRepositories, bootResolvers <<= appConfiguration map bootRepositories, diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 5536feeca..86ef49416 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -345,6 +345,7 @@ object Keys { val projectResolver = TaskKey[Resolver]("project-resolver", "Resolver that handles inter-project dependencies.", DTask) val fullResolvers = TaskKey[Seq[Resolver]]("full-resolvers", "Combines the project resolver, default resolvers, and user-defined resolvers.", CTask) val otherResolvers = SettingKey[Seq[Resolver]]("other-resolvers", "Resolvers not included in the main resolver chain, such as those in module configurations.", CSetting) + val useJCenter = SettingKey[Boolean]("use-jcenter", "Use JCenter as the default repository.", BSetting) val moduleConfigurations = SettingKey[Seq[ModuleConfiguration]]("module-configurations", "Defines module configurations, which override resolvers on a per-module basis.", BMinusSetting) val retrievePattern = SettingKey[String]("retrieve-pattern", "Pattern used to retrieve managed dependencies to the current build.", DSetting) val retrieveConfiguration = SettingKey[Option[RetrieveConfiguration]]("retrieve-configuration", "Configures retrieving dependencies to the current build.", DSetting) diff --git a/notes/0.13.10/make-JCenter-opt-in.markdown b/notes/0.13.10/make-JCenter-opt-in.markdown new file mode 100644 index 000000000..6ca9bec03 --- /dev/null +++ b/notes/0.13.10/make-JCenter-opt-in.markdown @@ -0,0 +1,7 @@ + + [@eed3si9n]: https://github.com/eed3si9n + [2217]: https://github.com/sbt/sbt/issues/2217 + +### Fixes with compatibility implications + +- sbt 0.13.10 adds a new setting `useJCenter`, which is set to `false` by default. When set to `true`, JCenter will be placed as the first external resolver to find library dependencies. [#2217][2217] by [@eed3si9n][@eed3si9n] diff --git a/sbt/src/sbt-test/dependency-management/default-resolvers/build.sbt b/sbt/src/sbt-test/dependency-management/default-resolvers/build.sbt new file mode 100644 index 000000000..dfb7fbb1c --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-resolvers/build.sbt @@ -0,0 +1,16 @@ +lazy val check = taskKey[Unit]("") +lazy val check2 = taskKey[Unit]("") + +lazy val root = (project in file(".")). + settings( + check := { + val fr = fullResolvers.value + assert(!(fr exists { _.name == "jcenter" })) + assert(fr exists { _.name == "public" }) + }, + check2 := { + val fr = fullResolvers.value + assert(fr exists { _.name == "jcenter" }) + assert(fr exists { _.name == "public" }) + } + ) diff --git a/sbt/src/sbt-test/dependency-management/default-resolvers/test b/sbt/src/sbt-test/dependency-management/default-resolvers/test new file mode 100644 index 000000000..2513e8edf --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/default-resolvers/test @@ -0,0 +1,5 @@ +> check + +> set useJCenter := true + +> check2