diff options
-rwxr-xr-x | build.sc | 39 | ||||
-rw-r--r-- | integration/src/test/resources/acyclic/build.sc | 6 | ||||
-rw-r--r-- | integration/src/test/resources/better-files/build.sc | 22 | ||||
-rw-r--r-- | integration/src/test/resources/jawn/build.sc | 37 | ||||
-rw-r--r-- | scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala | 4 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/Dep.scala | 9 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/GenIdea.scala | 4 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/MiscModule.scala | 2 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/PublishModule.scala | 2 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/ScalaModule.scala (renamed from scalalib/src/main/scala/mill/scalalib/Module.scala) | 18 | ||||
-rw-r--r-- | scalalib/src/main/scala/mill/scalalib/package.scala | 9 | ||||
-rw-r--r-- | scalalib/src/test/scala/mill/scalalib/HelloWorldTests.scala | 2 | ||||
-rw-r--r-- | scalalib/src/test/scala/mill/scalalib/ResolveDepsTests.scala | 8 |
13 files changed, 88 insertions, 74 deletions
@@ -10,17 +10,17 @@ import mill.modules.Jvm.createAssembly object moduledefs extends SbtModule{ def scalaVersion = "2.12.4" def ivyDeps = Agg( - Dep.Java("org.scala-lang", "scala-compiler", scalaVersion()), - Dep("com.lihaoyi", "sourcecode", "0.1.4") + ivy"org.scala-lang:scala-compiler:${scalaVersion()}", + ivy"com.lihaoyi::sourcecode:0.1.4" ) } trait MillModule extends SbtModule{ outer => def scalaVersion = "2.12.4" - def compileIvyDeps = Agg(Dep("com.lihaoyi", "acyclic", "0.1.7")) + def compileIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.1.7") def scalacOptions = Seq("-P:acyclic:force") - def scalacPluginIvyDeps = Agg(Dep("com.lihaoyi", "acyclic", "0.1.7")) + def scalacPluginIvyDeps = Agg(ivy"com.lihaoyi::acyclic:0.1.7") def repositories = super.repositories ++ Seq( MavenRepository("https://oss.sonatype.org/content/repositories/releases") @@ -32,29 +32,28 @@ trait MillModule extends SbtModule{ outer => class Tests(ctx0: mill.define.Ctx) extends mill.Module()(ctx0) with super.Tests{ def defaultCommandName() = "forkTest" def forkArgs = T{ testArgs() } - def projectDeps = + def moduleDeps = if (this == core.test) Seq(core) else Seq(outer, core.test) - def ivyDeps = Agg(Dep("com.lihaoyi", "utest", "0.6.0")) + def ivyDeps = Agg(ivy"com.lihaoyi::utest:0.6.0") def testFramework = "mill.UTestFramework" def scalacPluginClasspath = super.scalacPluginClasspath() ++ Seq(moduledefs.jar()) } } object core extends MillModule { - def projectDeps = Seq(moduledefs) + def moduleDeps = Seq(moduledefs) def compileIvyDeps = Agg( - Dep.Java("org.scala-lang", "scala-reflect", scalaVersion()) + ivy"org.scala-lang:scala-reflect:${scalaVersion()}" ) def ivyDeps = Agg( - Dep("com.lihaoyi", "sourcecode", "0.1.4"), - Dep("com.lihaoyi", "pprint", "0.5.3"), - Dep.Point("com.lihaoyi", "ammonite", "1.0.3-21-05b5d32"), - Dep("com.typesafe.play", "play-json", "2.6.6"), - Dep("org.scala-sbt", "zinc", "1.0.5"), - Dep.Java("org.scala-sbt", "test-interface", "1.0") + ivy"com.lihaoyi::sourcecode:0.1.4", + ivy"com.lihaoyi::pprint:0.5.3", + ivy"com.lihaoyi:::ammonite:1.0.3-21-05b5d32", + ivy"org.scala-sbt::zinc:1.0.5", + ivy"org.scala-sbt:test-interface:1.0" ) def generatedSources = T { @@ -85,8 +84,8 @@ class BridgeModule(crossVersion: String) extends PublishModule { Agg(PathRef(shared.downloadBridgeSource(T.ctx().dest, crossVersion))) } def ivyDeps = Agg( - Dep.Java("org.scala-lang", "scala-compiler", crossVersion), - Dep.Java("org.scala-sbt", "compiler-interface", "1.0.5") + ivy"org.scala-lang:scala-compiler:$crossVersion", + ivy"org.scala-sbt:compiler-interface:1.0.5" ) def publishWithFullScalaVersion = true @@ -102,7 +101,7 @@ class BridgeModule(crossVersion: String) extends PublishModule { } object scalalib extends MillModule { - def projectDeps = Seq(core) + def moduleDeps = Seq(core) def bridgeCompiles = mill.define.Task.traverse(bridges.items)(_._2.compile) def testArgs = T{ @@ -120,7 +119,7 @@ object scalalib extends MillModule { object scalajslib extends MillModule { - def projectDeps = Seq(scalalib) + def moduleDeps = Seq(scalalib) def bridgeClasspath(runDepClasspath: Agg[PathRef], classes: PathRef) = (runDepClasspath ++ Agg(classes)).map(_.path).mkString(File.pathSeparator) @@ -139,7 +138,7 @@ object scalajslib extends MillModule { case "1.0" => "1.0.0-M2" } def ivyDeps = Agg( - Dep("org.scala-js", "scalajs-tools", scalajsVersion) + ivy"org.scala-js::scalajs-tools:$scalajsVersion" ) } } @@ -155,7 +154,7 @@ def testRepos = T{ } object integration extends MillModule{ - def projectDeps = Seq(moduledefs, scalalib, scalajslib) + def moduleDeps = Seq(moduledefs, scalalib, scalajslib) def testArgs = T{ for((k, v) <- testRepos()) yield s"-D$k=$v" } diff --git a/integration/src/test/resources/acyclic/build.sc b/integration/src/test/resources/acyclic/build.sc index 140e5dc6..b8f878ad 100644 --- a/integration/src/test/resources/acyclic/build.sc +++ b/integration/src/test/resources/acyclic/build.sc @@ -1,5 +1,5 @@ import mill.Cross -import mill.scalalib.{SbtModule, PublishModule, Dep, CrossSbtModule} +import mill.scalalib.{SbtModule, PublishModule, Dep, CrossSbtModule, DepSyntax} import mill.scalalib.publish.{PomSettings, License, Developer, SCM} object acyclic extends Cross[AcyclicModule]("2.10.6", "2.11.8", "2.12.3", "2.12.4") @@ -25,12 +25,12 @@ class AcyclicModule(val crossScalaVersion: String) extends CrossSbtModule with P ) def ivyDeps = Agg( - Dep.Java("org.scala-lang", "scala-compiler", scalaVersion()) + ivy"org.scala-lang:scala-compiler:${scalaVersion()}" ) object test extends Tests{ def forkWorkingDir = ammonite.ops.pwd / 'target / 'workspace / 'acyclic def ivyDeps = Agg( - Dep("com.lihaoyi", "utest", "0.6.0") + ivy"com.lihaoyi::utest:0.6.0" ) def testFramework = "utest.runner.Framework" } diff --git a/integration/src/test/resources/better-files/build.sc b/integration/src/test/resources/better-files/build.sc index de0f6495..e541e3f1 100644 --- a/integration/src/test/resources/better-files/build.sc +++ b/integration/src/test/resources/better-files/build.sc @@ -1,4 +1,4 @@ -import mill.scalalib.{SbtModule, Dep} +import mill.scalalib.{SbtModule, Dep, DepSyntax} trait BetterFilesModule extends SbtModule{ def scalaVersion = "2.12.4" @@ -51,10 +51,10 @@ trait BetterFilesModule extends SbtModule{ ) override def javacOptions = Seq("-source", "1.8", "-target", "1.8", "-Xlint") object test extends Tests{ - def projectDeps = - if (this == core.test) super.projectDeps - else super.projectDeps ++ Seq(core.test) - def ivyDeps = Agg(Dep("org.scalatest", "scalatest", "3.0.4")) + def moduleDeps = + if (this == core.test) super.moduleDeps + else super.moduleDeps ++ Seq(core.test) + def ivyDeps = Agg(ivy"org.scalatest::scalatest:3.0.4") def testFramework = "org.scalatest.tools.Framework" } } @@ -62,19 +62,19 @@ trait BetterFilesModule extends SbtModule{ object core extends BetterFilesModule object akka extends BetterFilesModule{ - def projectDeps = Seq(core) - def ivyDeps = Agg(Dep("com.typesafe.akka", "akka-actor", "2.5.6")) + def moduleDeps = Seq(core) + def ivyDeps = Agg(ivy"com.typesafe.akka::akka-actor:2.5.6") } object shapeless extends BetterFilesModule{ - def projectDeps = Seq(core) - def ivyDeps = Agg(Dep("com.chuusai", "shapeless", "2.3.2")) + def moduleDeps = Seq(core) + def ivyDeps = Agg(ivy"com.chuusai::shapeless:2.3.2") } object benchmarks extends BetterFilesModule{ - def projectDeps = Seq(core) + def moduleDeps = Seq(core) def ivyDeps = Agg( - Dep.Java("commons-io", "commons-io", "2.5") + ivy"commons-io:commons-io:2.5" // "fastjavaio" % "fastjavaio" % "1.0" from "https://github.com/williamfiset/FastJavaIO/releases/download/v1.0/fastjavaio.jar" ) } diff --git a/integration/src/test/resources/jawn/build.sc b/integration/src/test/resources/jawn/build.sc index 161f302a..4898a3cb 100644 --- a/integration/src/test/resources/jawn/build.sc +++ b/integration/src/test/resources/jawn/build.sc @@ -1,7 +1,6 @@ import mill.scalalib import mill.Cross -import mill.scalalib.{Dep, TestModule, Module} - +import mill.scalalib.{Dep, TestModule, DepSyntax} object jawn extends Cross[JawnModule]("2.10.6", "2.11.11", "2.12.3") class JawnModule(crossVersion: String) extends mill.Module{ override def basePath = super.basePath / ammonite.ops.up / ammonite.ops.up @@ -13,12 +12,12 @@ class JawnModule(crossVersion: String) extends mill.Module{ "-optimize", "-unchecked" ) - def testProjectDeps: Seq[TestModule] = Nil + def testModuleDeps: Seq[TestModule] = Nil object test extends Tests{ - def projectDeps = super.projectDeps ++ testProjectDeps + def moduleDeps = super.moduleDeps ++ testModuleDeps def ivyDeps = Agg( - Dep("org.scalatest", "scalatest", "3.0.3"), - Dep("org.scalacheck", "scalacheck", "1.13.5") + ivy"org.scalatest::scalatest:3.0.3", + ivy"org.scalacheck::scalacheck:1.13.5" ) def testFramework = "org.scalatest.tools.Framework" } @@ -26,35 +25,35 @@ class JawnModule(crossVersion: String) extends mill.Module{ object parser extends JawnModule object util extends JawnModule{ - def projectDeps = Seq(parser) - def testProjectDeps = Seq(parser.test) + def moduleDeps = Seq(parser) + def testModuleDeps = Seq(parser.test) } object ast extends JawnModule{ - def projectDeps = Seq(parser, util) - def testProjectDeps = Seq(parser.test, util.test) + def moduleDeps = Seq(parser, util) + def testModuleDeps = Seq(parser.test, util.test) } class Support(ivyDeps0: Dep*)(implicit ctx: mill.define.Ctx) extends JawnModule{ - def projectDeps = Seq[Module](parser) + def moduleDeps = Seq(parser) def ivyDeps = Agg.from(ivyDeps0) } object support extends mill.Module{ - object argonaut extends Support(Dep("io.argonaut", "argonaut", "6.2")) - object json4s extends Support(Dep("org.json4s", "json4s-ast", "3.5.2")) + object argonaut extends Support(ivy"io.argonaut::argonaut:6.2") + object json4s extends Support(ivy"org.json4s::json4s-ast:3.5.2") object play extends Support(){ def ivyDeps = mill.T{ scalaBinaryVersion() match{ - case "2.10" => Agg(Dep("com.typesafe.play", "play-json", "2.4.11")) - case "2.11" => Agg(Dep("com.typesafe.play", "play-json", "2.5.15")) - case _ => Agg(Dep("com.typesafe.play", "play-json", "2.6.0")) + case "2.10" => Agg(ivy"com.typesafe.play::play-json:2.4.11") + case "2.11" => Agg(ivy"com.typesafe.play::play-json:2.5.15") + case _ => Agg(ivy"com.typesafe.play::play-json:2.6.0") } } } - object rojoma extends Support(Dep("com.rojoma", "rojoma-json", "2.4.3")) - object rojomaV3 extends Support(Dep("com.rojoma", "rojoma-json-v3", "3.7.2")){ + object rojoma extends Support(ivy"com.rojoma::rojoma-json:2.4.3") + object rojomaV3 extends Support(ivy"com.rojoma::rojoma-json-v3:3.7.2"){ override def basePath = super.basePath / ammonite.ops.up / "rojoma-v3" } - object spray extends Support(Dep("io.spray", "spray-json", "1.3.3")) + object spray extends Support(ivy"io.spray::spray-json:1.3.3") } }
\ No newline at end of file diff --git a/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala index d26c6a70..5c964fd6 100644 --- a/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala @@ -7,10 +7,10 @@ import ammonite.ops.Path import mill.eval.Result.Success import mill.scalajslib.Lib._ import mill.scalalib.Lib.resolveDependencies -import mill.scalalib.{Dep, Module, PublishModule, TestModule} +import mill.scalalib.{Dep, ScalaModule, PublishModule, TestModule} import mill.util.Loose -trait ScalaJSModule extends scalalib.Module { outer => +trait ScalaJSModule extends scalalib.ScalaModule { outer => def scalaJSVersion: T[String] diff --git a/scalalib/src/main/scala/mill/scalalib/Dep.scala b/scalalib/src/main/scala/mill/scalalib/Dep.scala index 3d4c43ac..aa301fcb 100644 --- a/scalalib/src/main/scala/mill/scalalib/Dep.scala +++ b/scalalib/src/main/scala/mill/scalalib/Dep.scala @@ -3,6 +3,15 @@ import mill.util.JsonFormatters._ import upickle.default.{macroRW, ReadWriter => RW} sealed trait Dep object Dep{ + + implicit def parse(signature: String) = { + signature.split(':') match{ + case Array(a, b, c) => Dep.Java(a, b, c) + case Array(a, "", b, c) => Dep.Scala(a, b, c) + case Array(a, "", "", b, c) => Dep.Point(a, b, c) + case _ => throw new Exception(s"Unable to parse signature: [$signature]") + } + } def apply(org: String, name: String, version: String): Dep = { this(coursier.Dependency(coursier.Module(org, name), version)) } diff --git a/scalalib/src/main/scala/mill/scalalib/GenIdea.scala b/scalalib/src/main/scala/mill/scalalib/GenIdea.scala index b11c58f3..e9d8fac5 100644 --- a/scalalib/src/main/scala/mill/scalalib/GenIdea.scala +++ b/scalalib/src/main/scala/mill/scalalib/GenIdea.scala @@ -27,7 +27,7 @@ object GenIdea { def xmlFileLayout[T](evaluator: Evaluator[T], rootModule: mill.Module): Seq[(RelPath, scala.xml.Node)] = { - val modules = rootModule.millInternal.segmentsToModules.values.collect{case x: scalalib.Module => (x.millModuleSegments, x)}.toSeq + val modules = rootModule.millInternal.segmentsToModules.values.collect{case x: scalalib.ScalaModule => (x.millModuleSegments, x)}.toSeq val resolved = for((path, mod) <- modules) yield { val Seq(resolvedCp: Loose.Agg[PathRef], resolvedSrcs: Loose.Agg[PathRef]) = @@ -87,7 +87,7 @@ object GenIdea { Strict.Agg.from(generatedSourcePaths), Strict.Agg(paths.out), Strict.Agg.from(resolvedDeps.map(pathToLibName)), - Strict.Agg.from(mod.projectDeps.map{m => moduleName(moduleLabels(m))}.distinct) + Strict.Agg.from(mod.moduleDeps.map{ m => moduleName(moduleLabels(m))}.distinct) ) Tuple2(".idea_modules"/s"${moduleName(path)}.iml", elem) } diff --git a/scalalib/src/main/scala/mill/scalalib/MiscModule.scala b/scalalib/src/main/scala/mill/scalalib/MiscModule.scala index 5e28c34b..52a95337 100644 --- a/scalalib/src/main/scala/mill/scalalib/MiscModule.scala +++ b/scalalib/src/main/scala/mill/scalalib/MiscModule.scala @@ -7,7 +7,7 @@ import mill.eval.{PathRef, Result} import mill.util.Loose.Agg -trait SbtModule extends Module { outer => +trait SbtModule extends ScalaModule { outer => override def sources = T.input{ Agg(PathRef(basePath / 'src / 'main / 'scala)) } override def resources = T.input{ Agg(PathRef(basePath / 'src / 'main / 'resources)) } trait Tests extends super.Tests { diff --git a/scalalib/src/main/scala/mill/scalalib/PublishModule.scala b/scalalib/src/main/scala/mill/scalalib/PublishModule.scala index 4fd8e94f..64efce77 100644 --- a/scalalib/src/main/scala/mill/scalalib/PublishModule.scala +++ b/scalalib/src/main/scala/mill/scalalib/PublishModule.scala @@ -7,7 +7,7 @@ import mill.util.Loose.Agg /** * Configuration necessary for publishing a Scala module to Maven Central or similar */ -trait PublishModule extends Module { outer => +trait PublishModule extends ScalaModule { outer => import mill.scalalib.publish._ def pomSettings: T[PomSettings] diff --git a/scalalib/src/main/scala/mill/scalalib/Module.scala b/scalalib/src/main/scala/mill/scalalib/ScalaModule.scala index 48eb4b14..5bae1749 100644 --- a/scalalib/src/main/scala/mill/scalalib/Module.scala +++ b/scalalib/src/main/scala/mill/scalalib/ScalaModule.scala @@ -16,11 +16,11 @@ import sbt.testing.Status /** * Core configuration required to compile a single Scala compilation target */ -trait Module extends mill.Module with TaskModule { outer => +trait ScalaModule extends mill.Module with TaskModule { outer => def defaultCommandName() = "run" trait Tests extends TestModule{ def scalaVersion = outer.scalaVersion() - override def projectDeps = Seq(outer) + override def moduleDeps = Seq(outer) } def scalaVersion: T[String] def mainClass: T[Option[String]] = None @@ -39,23 +39,23 @@ trait Module extends mill.Module with TaskModule { outer => MavenRepository("https://repo1.maven.org/maven2") ) - def projectDeps = Seq.empty[Module] + def moduleDeps = Seq.empty[ScalaModule] def depClasspath = T{ Agg.empty[PathRef] } def upstreamRunClasspath = T{ - Task.traverse(projectDeps)(p => + Task.traverse(moduleDeps)(p => T.task(p.runDepClasspath() ++ p.runClasspath()) ) } def upstreamCompileOutput = T{ - Task.traverse(projectDeps)(_.compile) + Task.traverse(moduleDeps)(_.compile) } def upstreamCompileClasspath = T{ externalCompileDepClasspath() ++ upstreamCompileOutput().map(_.classes) ++ - Task.traverse(projectDeps)(_.compileDepClasspath)().flatten + Task.traverse(moduleDeps)(_.compileDepClasspath)().flatten } def resolveDeps(deps: Task[Agg[Dep]], sources: Boolean = false) = T.task{ @@ -69,14 +69,14 @@ trait Module extends mill.Module with TaskModule { outer => } def externalCompileDepClasspath: T[Agg[PathRef]] = T{ - Agg.from(Task.traverse(projectDeps)(_.externalCompileDepClasspath)().flatten) ++ + Agg.from(Task.traverse(moduleDeps)(_.externalCompileDepClasspath)().flatten) ++ resolveDeps( T.task{ivyDeps() ++ compileIvyDeps() ++ scalaCompilerIvyDeps(scalaVersion())} )() } def externalCompileDepSources: T[Agg[PathRef]] = T{ - Agg.from(Task.traverse(projectDeps)(_.externalCompileDepSources)().flatten) ++ + Agg.from(Task.traverse(moduleDeps)(_.externalCompileDepSources)().flatten) ++ resolveDeps( T.task{ivyDeps() ++ compileIvyDeps() ++ scalaCompilerIvyDeps(scalaVersion())}, sources = true @@ -268,7 +268,7 @@ object TestModule{ } } } -trait TestModule extends Module with TaskModule { +trait TestModule extends ScalaModule with TaskModule { override def defaultCommandName() = "test" def testFramework: T[String] diff --git a/scalalib/src/main/scala/mill/scalalib/package.scala b/scalalib/src/main/scala/mill/scalalib/package.scala index 1bad9226..5a282e82 100644 --- a/scalalib/src/main/scala/mill/scalalib/package.scala +++ b/scalalib/src/main/scala/mill/scalalib/package.scala @@ -1,5 +1,12 @@ package mill package object scalalib { - + implicit class DepSyntax(ctx: StringContext){ + def ivy(args: Any*) = Dep.parse{ + ( + ctx.parts.take(args.length).zip(args).flatMap{case (p, a) => Seq(p, a)} ++ + ctx.parts.drop(args.length) + ).mkString + } + } } diff --git a/scalalib/src/test/scala/mill/scalalib/HelloWorldTests.scala b/scalalib/src/test/scala/mill/scalalib/HelloWorldTests.scala index 657ddc9e..70c78cee 100644 --- a/scalalib/src/test/scala/mill/scalalib/HelloWorldTests.scala +++ b/scalalib/src/test/scala/mill/scalalib/HelloWorldTests.scala @@ -16,7 +16,7 @@ import scala.collection.JavaConverters._ object HelloWorldTests extends TestSuite { - trait HelloWorldModule extends scalalib.Module { + trait HelloWorldModule extends scalalib.ScalaModule { def scalaVersion = "2.12.4" def basePath = HelloWorldTests.workingSrcPath } diff --git a/scalalib/src/test/scala/mill/scalalib/ResolveDepsTests.scala b/scalalib/src/test/scala/mill/scalalib/ResolveDepsTests.scala index f28df152..d1ddde20 100644 --- a/scalalib/src/test/scala/mill/scalalib/ResolveDepsTests.scala +++ b/scalalib/src/test/scala/mill/scalalib/ResolveDepsTests.scala @@ -14,25 +14,25 @@ object ResolveDepsTests extends TestSuite { val tests = Tests { 'resolveValidDeps - { - val deps = Agg(Dep("com.lihaoyi", "pprint", "0.5.3")) + val deps = Agg(ivy"com.lihaoyi::pprint:0.5.3") val Success(paths) = evalDeps(deps) assert(paths.nonEmpty) } 'errOnInvalidOrgDeps - { - val deps = Agg(Dep("xxx.yyy.invalid", "pprint", "0.5.3")) + val deps = Agg(ivy"xxx.yyy.invalid::pprint:0.5.3") val Failure(errMsg) = evalDeps(deps) assert(errMsg.contains("xxx.yyy.invalid")) } 'errOnInvalidVersionDeps - { - val deps = Agg(Dep("com.lihaoyi", "pprint", "invalid.version.num")) + val deps = Agg(ivy"com.lihaoyi::pprint:invalid.version.num") val Failure(errMsg) = evalDeps(deps) assert(errMsg.contains("invalid.version.num")) } 'errOnPartialSuccess - { - val deps = Agg(Dep("com.lihaoyi", "pprint", "0.5.3"), Dep("fake", "fake", "fake")) + val deps = Agg(ivy"com.lihaoyi::pprint:0.5.3", ivy"fake::fake:fake") val Failure(errMsg) = evalDeps(deps) assert(errMsg.contains("fake")) } |