你能解释一下如何在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
Run Code Online (Sandbox Code Playgroud)
我有project
单个文件的子文件夹,Hi.scala
其中包含以下代码
object Hi {
def main(args: Array[String]) = println("Hi!")
}
Run Code Online (Sandbox Code Playgroud)
我可以通过调用编译它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
Run Code Online (Sandbox Code Playgroud)
Jed*_*ith 46
你需要在把你的应用程序的源src/main/scala/
,project/
是构建定义代码.
Art*_*iev 23
尝试使用对象并从App扩展它而不是使用类
object Main extends App {
println("Hello from main scala object")
}
Run Code Online (Sandbox Code Playgroud)
因为你需要运行main方法既不是主类
exp*_*ert 16
以下是如何指定主类
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
Run Code Online (Sandbox Code Playgroud)
将范围切换到moduleX,如在Built.scala中定义.将自动检测该范围内的所有主要类.否则你会得到同样的错误,没有检测到主类.看在上帝的意义上,SBT没有告诉你没有设置默认范围.它与默认源文件夹和非默认源文件夹无关,但只有SBT没有告诉任何它不知道默认使用哪个模块.
对类型安全的大提示:请添加默认输出,如:
[info] Project module is not set. Please use ''project moduleX'' set scope
or set in Built file (LinkToDocu)
Run Code Online (Sandbox Code Playgroud)
在SBT结束时开始降低在多模块项目中使用SBT时的挫折感.....
归档时间: |
|
查看次数: |
50359 次 |
最近记录: |