难道你们,请向我解释如何设置主类在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
我有子文件夹中project
与单个文件Hi.scala
其中包含下面的代码
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
你需要把你的应用程序的源中src/main/scala/
, project/
是构建定义代码。
尝试使用一个对象,并从应用程序扩展它,而不是使用类
object Main extends App {
println("Hello from main scala object")
}
因为你需要运行的主要方法既不是主类
下面是如何指定主类
mainClass in (Compile,run) := Some("my.fully.qualified.MainClassName")
对于SBT自定义模块(0.13),只是SBT控制台上输入:
project moduleX
[info] Set current project to moduleX (in build file:/path/to/Projects/)
> run
[info] Running main
切换范围MODULEX,如在Built.scala限定。 该范围内的所有主要类别将被自动检测。 否则你没有检测到主类的同样的错误。 看在上帝的份上,SBT不会告诉你的是,默认的范围中设定。 它无关,与默认与非默认的源文件夹,但只能用SBT没有告诉任何它不知道默认使用哪个模块。
大提示类型安全,请添加默认的输出,如:
[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和激活运行使用运行主命令指定主类:
sbt "run-main com.saeed.ApplicationMain"
要么
activator "run-main com.saeed.ApplicationMain"
我有同样的问题:在本教程以下模式http://www.scala-sbt.org/0.13/docs/Hello.html ,在我看来,作为一个构建工具sbt
的互动和错误消息可相当误导新人。
原来,头部小时后刮伤,我错过了关键的cd hello
的例子中,每个时间线。 :-(
有4个选项
你有1主类
你有2个以上的主要类别
Multiple main classes detected, select one to run:
[1] a.b.DummyMain1
[2] a.b.DummyMain2
Enter number:
你想手动设置主类。
mainClass in run := Some("abDummyMain1")
你可以用主类作为参数运行
sbt runMain abDummyMain1
如果主类是在不同的项目,然后通过设置以下命令build.sbt
将工作:
addCommandAlias("run", "; project_folder/run")