【发布时间】:2013-03-31 06:41:59
【问题描述】:
你们能解释一下如何在 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
【问题讨论】:
-
您的经历并不典型。您是否考虑过您的非标准 Scala 构建是否可能是问题的一部分?
-
@RandallSchulz 不。因为我可以编译。同样为了实验,我更改了设置,让 SBT 获取 Scala 编译器并重命名
mainClass中的类名称。sbt run仍然有效 :) 这表明 SBT 只是忽略了该设置。 -
@HeikoSeeberger 我拿走了 SBT 网站上的最新消息。标准 Play Framework 项目的目录结构不同。我想强制 Play 使用最新版本的 scala 而不是强制使用 2.9.2。你能支持这个问题吗?
-
您遗漏了一些要点:首先,scala-sbt.org 将 0.12.3 显示为最新(已发布)版本。其次,sbt 内部使用的 Scala 版本与您项目的 Scala 版本无关,除非您在构建中未设置不同的
scalaVersion时将其用作默认值。第三,与许多其他 Scala 库一样,Play 是针对特定版本的 Scala 编译的,您必须使用该版本(或二进制兼容升级)。第四,我在这里完全代表我自己。 -
@HeikoSeeberger 此问题中描述的问题与 alpha 版本无关。但不错的尝试。