如何在SBT 0.13项目中设置主类
可否请你向我解释如何在SBT项目中设置主类? 我正在尝试使用版本0.13。
我的目录结构非常简单(不像SBT的文档)。 在根文件夹中,我有以下内容build.sbt
name := "sbt_test" version := "1.0" scalaVersion := "2.10.1-local" autoScalaLibrary := false scalaHome := Some(file("/Program Files (x86)/scala/")) mainClass := Some("Hi") libraryDependencies ++= Seq( "org.scalatest" % "scalatest_2.10" % "2.0.M5b" % "test" ) EclipseKeys.withSource := true
我有包含以下代码的单个文件Hi.scala
子文件夹project
object Hi { def main(args: Array[String]) = println("Hi!") }
我可以通过调用sbt compile
来编译它,但是sbt run
返回
The system cannot find the file C:\work\externals\sbt\bin\sbtconfig.txt. [info] Loading project definition from C:\work\test_projects\sbt_test\project [info] Set current project to sbt_test (in build file:/C:/work/test_projects/sbt_test/) java.lang.RuntimeException: No main class detected. at scala.sys.package$.error(package.scala:27) [trace] Stack trace suppressed: run last compile:run for the full output. [error] (compile:run) No main class detected. [error] Total time: 0 s, completed Apr 8, 2013 6:14:41 PM
PS。
我感到震惊的是,在阅读SBT的文档和StackOverflow的15个类似问题后,我无法运行SBT项目。 这是基本的function,它应该是头脑简单,清醒在SBT的网站前10秒。
PS2。
我想问Typesafe的员工,以改善他们的产品的文档,而不是降低投入大量时间在切换到新平台的人的问题。
您需要将您的应用程序的源文件放在src/main/scala/
, project/
用于构build定义代码。
这里是如何指定主类
mainClass in (Compile,run) := Some("my.fully.qualified.MainClassName")
尝试使用一个对象,并从应用程序而不是使用类扩展它
object Main extends App { println("Hello from main scala object") }
因为你需要运行主要的方法既不主要的类
对于SBT(0.13)中的自定义模块,只需在SBT控制台上input:
project moduleX [info] Set current project to moduleX (in build file:/path/to/Projects/) > run [info] Running main
按照Built.scala中的定义将范围切换到moduleX。 在该范围内的所有主要类将被自动检测。 否则,你会得到没有检测到主类的错误。 看在上帝的份上,SBT并没有告诉你默认的范围没有设定。 它与默认和非默认源文件夹没有任何关系,但是只有在SBT没有告诉它不知道默认使用哪个模块的情况下。
大提示types安全 :请添加一个默认的输出,如:
[info] Project module is not set. Please use ''project moduleX'' set scope or set in Built file (LinkToDocu)
在SBT结束时开始降低在多模块项目中使用SBT时的挫败感…..
如果您的项目中有多个主要方法,则可以将以下行添加到build.sbt文件中:
val projectMainClass = "com.saeed.ApplicationMain" mainClass in (Compile, run) := Some(projectMainClass)
如果要指定将应用程序打包为JAR文件时将添加到清单中的类,请将此行添加到build.sbt文件中:
mainClass in (Compile, packageBin) := Some(projectMainClass)
您也可以在sbt和activator中使用run-main命令指定主类来运行:
sbt "run-main com.saeed.ApplicationMain"
要么
activator "run-main com.saeed.ApplicationMain"
我有同样的问题:模式遵循http://www.scala-sbt.org/0.13/docs/Hello.html教程,在我看来,作为一个构build工具;sbt
的交互和错误消息可以相当误导新人。
事实certificate,后来几个小时的头部划伤,我错过了每个例子中关键的cd hello
行。 🙁