Merge pull request #1669 from kretes/1648-warn-about-main-classes

Fix for https://github.com/sbt/sbt/issues/1648 - warn about multiple or no main classes
This commit is contained in:
Josh Suereth 2014-10-23 07:37:07 -04:00
commit b834be8bfa
2 changed files with 19 additions and 4 deletions

View File

@ -264,9 +264,9 @@ object Defaults extends BuildCommon {
definedSbtPlugins <<= discoverPlugins,
discoveredSbtPlugins <<= discoverSbtPluginNames,
inTask(run)(runnerTask :: Nil).head,
selectMainClass := mainClass.value orElse selectRunMain(discoveredMainClasses.value),
selectMainClass := pickMainClass(discoveredMainClasses.value) orElse askForMainClass(discoveredMainClasses.value),
mainClass in run := (selectMainClass in run).value,
mainClass := selectPackageMain(discoveredMainClasses.value),
mainClass := pickMainClassOrWarn(discoveredMainClasses.value, streams.value.log),
run <<= runTask(fullClasspath, mainClass in run, runner in run),
runMain <<= runMainTask(fullClasspath, runner in run),
copyResources <<= copyResourcesTask
@ -662,10 +662,22 @@ object Defaults extends BuildCommon {
new Package.Configuration(srcs, path, options)
}
def selectRunMain(classes: Seq[String]): Option[String] =
@deprecated("use Defaults.askForMainClass", "0.13.7")
def selectRunMain(classes: Seq[String]): Option[String] = askForMainClass(classes)
@deprecated("use Defaults.pickMainClass", "0.13.7")
def selectPackageMain(classes: Seq[String]): Option[String] = pickMainClass(classes)
def askForMainClass(classes: Seq[String]): Option[String] =
sbt.SelectMainClass(Some(SimpleReader readLine _), classes)
def selectPackageMain(classes: Seq[String]): Option[String] =
def pickMainClass(classes: Seq[String]): Option[String] =
sbt.SelectMainClass(None, classes)
private def pickMainClassOrWarn(classes: Seq[String], logger: Logger): Option[String] = {
classes match {
case Nil => logger.warn("No main class detected")
case multiple if multiple.size > 1 => logger.warn("Multiple main classes detected. Run 'show discoveredMainClasses' to see the list")
case _ =>
}
pickMainClass(classes)
}
def doClean(clean: Seq[File], preserve: Seq[File]): Unit =
IO.withTemporaryDirectory { temp =>

View File

@ -11,6 +11,7 @@
[@tmandke]: https://github.com/tmandke
[@topping]: https://github.com/topping
[@WarsawScala]: https://github.com/WarsawScala
[@kretes]: https://github.com/kretes
[1237]: https://github.com/sbt/sbt/issues/1237
[1430]: https://github.com/sbt/sbt/issues/1430
[1544]: https://github.com/sbt/sbt/issues/1544
@ -33,6 +34,7 @@
[1631]: https://github.com/sbt/sbt/pull/1631
[1642]: https://github.com/sbt/sbt/pull/1642
[1683]: https://github.com/sbt/sbt/pull/1683
[1648]: https://github.com/sbt/sbt/pull/1648
### Fixes with compatibility implications
@ -49,6 +51,7 @@
- Adds support for publishing to a Maven repository with `file` URLs. [#1618][1618] by [@jsuereth][@jsuereth]
- Don't hardcode existing relations in `TextAnalysisFormat`. [#1572][1572] by [@Duhemm][@Duhemm]
- Adds `developers` key. [#1590][1590] by [@jedesah][@jedesah]
- Will warn when none or multiple main classes detected. [#1648][1648] by [@kretes][@kretes]
### Bug fixes