diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-17 11:53:48 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-17 11:53:48 -0800 |
commit | 865045540bd80bebb1655005abf32bc089c33895 (patch) | |
tree | 694178964ec1f8f8af821f854655865cd9cd8612 /scalalib | |
parent | 92edcae5094e52783f825021e4172a6b072300e0 (diff) | |
parent | 4cae6ff8a1111bb6c4bc6a44e67bd0affdbb9792 (diff) | |
download | mill-865045540bd80bebb1655005abf32bc089c33895.tar.gz mill-865045540bd80bebb1655005abf32bc089c33895.tar.bz2 mill-865045540bd80bebb1655005abf32bc089c33895.zip |
Merge branch '130'
Diffstat (limited to 'scalalib')
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaModule.scala | 14 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaWorkerApi.scala | 2 | ||||
-rw-r--r-- | scalalib/test/src/mill/scalalib/HelloWorldTests.scala | 31 |
3 files changed, 42 insertions, 5 deletions
diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index 390672c6..05c34249 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -23,7 +23,19 @@ trait ScalaModule extends mill.Module with TaskModule { outer => override def moduleDeps = Seq(outer) } def scalaVersion: T[String] - def mainClass: T[Option[String]] = None + + def mainClass: T[Option[String]] = T{ + discoverMainClasses() match { + case Seq(main) => Some(main) + case _ => None + } + } + + def discoverMainClasses: T[Seq[String]] = T{ + Task.traverse(transitiveModuleDeps){ module => T.task { + mill.scalalib.ScalaWorkerApi.scalaWorker().discoverMainClasses(module.compile()) + }}().flatten.distinct + } def ivyDeps = T{ Agg.empty[Dep] } def compileIvyDeps = T{ Agg.empty[Dep] } diff --git a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala index 03cd7d9d..ec2489af 100644 --- a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala +++ b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala @@ -62,4 +62,6 @@ trait ScalaWorkerApi { testClassfilePath: Agg[Path], args: Seq[String]) (implicit ctx: mill.util.Ctx.Log): (String, Seq[Result]) + + def discoverMainClasses(compilationResult: CompilationResult)(implicit ctx: mill.util.Ctx): Seq[String] } diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala index 1d39f180..945bec27 100644 --- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala +++ b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala @@ -33,6 +33,15 @@ object HelloWorldTests extends TestSuite { class HelloWorldCross(val crossScalaVersion: String) extends CrossScalaModule } + object HelloWorldDefaultMain extends HelloBase { + object core extends HelloWorldModule + } + + object HelloWorldWithoutMain extends HelloBase { + object core extends HelloWorldModule{ + def mainClass = None + } + } object HelloWorldWithMain extends HelloBase { object core extends HelloWorldModule{ @@ -291,8 +300,8 @@ object HelloWorldTests extends TestSuite { read(runResult) == "hello rockjam, your age is: 25" ) } - 'notRunWithoutMainClass - workspaceTest(HelloWorld){eval => - val Left(Result.Exception(err, _)) = eval.apply(HelloWorld.core.run()) + 'notRunWithoutMainClass - workspaceTest(HelloWorldWithoutMain){eval => + val Left(Result.Exception(err, _)) = eval.apply(HelloWorldWithoutMain.core.run()) assert( err.isInstanceOf[RuntimeException] @@ -314,8 +323,22 @@ object HelloWorldTests extends TestSuite { read(runResult) == "hello rockjam, your age is: 25" ) } - 'notRunWithoutMainClass - workspaceTest(HelloWorld){eval => - val Left(Result.Exception(err, _)) = eval.apply(HelloWorld.core.runLocal()) + 'runWithDefaultMain - workspaceTest(HelloWorldDefaultMain){eval => + val runResult = eval.outPath / 'core / 'run / 'dest / "hello-mill" + val Right((_, evalCount)) = eval.apply( + HelloWorldDefaultMain.core.runLocal(runResult.toString) + ) + + assert(evalCount > 0) + + + assert( + exists(runResult), + read(runResult) == "hello rockjam, your age is: 25" + ) + } + 'notRunWithoutMainClass - workspaceTest(HelloWorldWithoutMain){eval => + val Left(Result.Exception(err, _)) = eval.apply(HelloWorldWithoutMain.core.runLocal()) assert( err.isInstanceOf[RuntimeException] |