From 75c86690d578fd6f93ea8090e28b1c7b6cfe69d2 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Sat, 25 Jun 2016 20:15:09 +0200 Subject: [PATCH] Set default artifact type to JAR from sbt plugin Even if the packaging attribute of the dependency says the packaging is different (e.g. pom), this makes the plugin try to get a JAR anyway. Fixes https://github.com/alexarchambault/coursier/issues/278 --- .../scala-2.10/coursier/CoursierPlugin.scala | 2 ++ .../main/scala-2.10/coursier/FromSbt.scala | 12 ++++++---- .../src/main/scala-2.10/coursier/Keys.scala | 1 + .../src/main/scala-2.10/coursier/Tasks.scala | 24 ++++++++++++++----- .../sbt-test/sbt-coursier/zookeeper/build.sbt | 10 ++++++++ .../zookeeper/project/plugins.sbt | 11 +++++++++ .../zookeeper/src/main/scala/Main.scala | 8 +++++++ .../src/sbt-test/sbt-coursier/zookeeper/test | 3 +++ 8 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt create mode 100644 plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt create mode 100644 plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala create mode 100644 plugin/src/sbt-test/sbt-coursier/zookeeper/test diff --git a/plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala b/plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala index c4f6e4ace..521f5d3bd 100644 --- a/plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala +++ b/plugin/src/main/scala-2.10/coursier/CoursierPlugin.scala @@ -12,6 +12,7 @@ object CoursierPlugin extends AutoPlugin { object autoImport { val coursierParallelDownloads = Keys.coursierParallelDownloads val coursierMaxIterations = Keys.coursierMaxIterations + val coursierDefaultArtifactType = Keys.coursierDefaultArtifactType val coursierChecksums = Keys.coursierChecksums val coursierArtifactsChecksums = Keys.coursierArtifactsChecksums val coursierCachePolicies = Keys.coursierCachePolicies @@ -57,6 +58,7 @@ object CoursierPlugin extends AutoPlugin { override lazy val projectSettings = Seq( coursierParallelDownloads := 6, coursierMaxIterations := 50, + coursierDefaultArtifactType := "jar", coursierChecksums := Seq(Some("SHA-1"), None), coursierArtifactsChecksums := Seq(None), coursierCachePolicies := CachePolicy.default, diff --git a/plugin/src/main/scala-2.10/coursier/FromSbt.scala b/plugin/src/main/scala-2.10/coursier/FromSbt.scala index 2442144ce..c162efad4 100644 --- a/plugin/src/main/scala-2.10/coursier/FromSbt.scala +++ b/plugin/src/main/scala-2.10/coursier/FromSbt.scala @@ -49,10 +49,11 @@ object FromSbt { (module0, version) } - def dependencies( + def dependencies( module: ModuleID, scalaVersion: String, - scalaBinaryVersion: String + scalaBinaryVersion: String, + defaultArtifactType: String ): Seq[(String, Dependency)] = { // TODO Warn about unsupported properties in `module` @@ -74,7 +75,7 @@ object FromSbt { val attributes = if (module.explicitArtifacts.isEmpty) - Seq(Attributes()) + Seq(Attributes(defaultArtifactType, "")) else module.explicitArtifacts.map { a => Attributes(`type` = a.extension, classifier = a.classifier.getOrElse("")) @@ -105,14 +106,15 @@ object FromSbt { allDependencies: Seq[ModuleID], ivyConfigurations: Map[String, Seq[String]], scalaVersion: String, - scalaBinaryVersion: String + scalaBinaryVersion: String, + defaultArtifactType: String ): Project = { // FIXME Ignored for now - easy to support though // val sbtDepOverrides = dependencyOverrides.value // val sbtExclusions = excludeDependencies.value - val deps = allDependencies.flatMap(dependencies(_, scalaVersion, scalaBinaryVersion)) + val deps = allDependencies.flatMap(dependencies(_, scalaVersion, scalaBinaryVersion, defaultArtifactType)) Project( Module( diff --git a/plugin/src/main/scala-2.10/coursier/Keys.scala b/plugin/src/main/scala-2.10/coursier/Keys.scala index f5d869995..3aa4a297c 100644 --- a/plugin/src/main/scala-2.10/coursier/Keys.scala +++ b/plugin/src/main/scala-2.10/coursier/Keys.scala @@ -12,6 +12,7 @@ import scala.concurrent.duration.Duration object Keys { val coursierParallelDownloads = SettingKey[Int]("coursier-parallel-downloads") val coursierMaxIterations = SettingKey[Int]("coursier-max-iterations") + val coursierDefaultArtifactType = SettingKey[String]("coursier-default-artifact-type") val coursierChecksums = SettingKey[Seq[Option[String]]]("coursier-checksums") val coursierArtifactsChecksums = SettingKey[Seq[Option[String]]]("coursier-artifacts-checksums") val coursierCachePolicies = SettingKey[Seq[CachePolicy]]("coursier-cache-policies") diff --git a/plugin/src/main/scala-2.10/coursier/Tasks.scala b/plugin/src/main/scala-2.10/coursier/Tasks.scala index cad818916..99e6420c7 100644 --- a/plugin/src/main/scala-2.10/coursier/Tasks.scala +++ b/plugin/src/main/scala-2.10/coursier/Tasks.scala @@ -76,16 +76,22 @@ object Tasks { val allDependenciesTask = allDependencies.in(projectRef).get(state) + lazy val projId = projectID.in(projectRef).get(state) + lazy val sv = scalaVersion.in(projectRef).get(state) + lazy val sbv = scalaBinaryVersion.in(projectRef).get(state) + lazy val defaultArtifactType = coursierDefaultArtifactType.in(projectRef).get(state) + for { allDependencies <- allDependenciesTask } yield { FromSbt.project( - projectID.in(projectRef).get(state), + projId, allDependencies, configurations.map { cfg => cfg.name -> cfg.extendsConfigs.map(_.name) }.toMap, - scalaVersion.in(projectRef).get(state), - scalaBinaryVersion.in(projectRef).get(state) + sv, + sbv, + defaultArtifactType ) } } @@ -240,13 +246,15 @@ object Tasks { if (sbtClassifiers) { val sv = scalaVersion.value val sbv = scalaBinaryVersion.value + val defaultArtifactType = coursierDefaultArtifactType.value val proj = FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv + sbv, + defaultArtifactType ) val fallbackDeps = FromSbt.fallbackDependencies( @@ -587,13 +595,15 @@ object Tasks { if (sbtClassifiers) { val sv = scalaVersion.value val sbv = scalaBinaryVersion.value + val defaultArtifactType = coursierDefaultArtifactType.value FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv + sbv, + defaultArtifactType ) } else { val proj = coursierProject.value @@ -800,13 +810,15 @@ object Tasks { val cm = coursierSbtClassifiersModule.value val sv = scalaVersion.value val sbv = scalaBinaryVersion.value + val defaultArtifactType = coursierDefaultArtifactType.value FromSbt.project( cm.id, cm.modules, cm.configurations.map(cfg => cfg.name -> cfg.extendsConfigs.map(_.name)).toMap, sv, - sbv + sbv, + defaultArtifactType ) } else { val proj = coursierProject.value diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt b/plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt new file mode 100644 index 000000000..7dd1d9f7d --- /dev/null +++ b/plugin/src/sbt-test/sbt-coursier/zookeeper/build.sbt @@ -0,0 +1,10 @@ +scalaVersion := "2.11.8" + +libraryDependencies += "org.apache.zookeeper" % "zookeeper" % "3.5.0-alpha" + +coursierCachePolicies := { + if (sys.props("os.name").startsWith("Windows")) + coursierCachePolicies.value + else + Seq(coursier.CachePolicy.ForceDownload) +} diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt b/plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt new file mode 100644 index 000000000..152225a9e --- /dev/null +++ b/plugin/src/sbt-test/sbt-coursier/zookeeper/project/plugins.sbt @@ -0,0 +1,11 @@ +{ + val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin + ) + ) + + addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion) +} diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala b/plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala new file mode 100644 index 000000000..032874759 --- /dev/null +++ b/plugin/src/sbt-test/sbt-coursier/zookeeper/src/main/scala/Main.scala @@ -0,0 +1,8 @@ +import java.io.File +import java.nio.file.Files + +import org.apache.zookeeper.ZooKeeper + +object Main extends App { + Files.write(new File("output").toPath, classOf[ZooKeeper].getSimpleName.getBytes("UTF-8")) +} diff --git a/plugin/src/sbt-test/sbt-coursier/zookeeper/test b/plugin/src/sbt-test/sbt-coursier/zookeeper/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/plugin/src/sbt-test/sbt-coursier/zookeeper/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output