SBT 运行 语句显示:未检测到主要 class
SBT run statement shows: No main class detected
我创建了一个网络应用程序,当我尝试 运行 和 sbt run
时,它显示:
sbt run
[warn] No sbt.version set in project/build.properties, base directory: /home/developer/scala/user-svc/target/scala-2.13
[info] Loading global plugins from /home/developer/.sbt/1.0/plugins
[info] Set current project to scala-2-13 (in build file:/home/developer/scala/user-svc/target/scala-2.13/)
[error] java.lang.RuntimeException: No main class detected.
[error] at scala.sys.package$.error(package.scala:30)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] (Compile / bgRun) No main class detected.
[error] Total time: 0 s, completed May 23, 2020, 11:44:32 PM
build.sbt
的内容是:
val Http4sVersion = "0.21.4"
val CirceVersion = "0.13.0"
val Specs2Version = "4.9.3"
val LogbackVersion = "1.2.3"
lazy val root = (project in file("."))
.settings(
organization := "io.example",
name := "user-svc",
version := "0.0.1-SNAPSHOT",
scalaVersion := "2.13.2",
libraryDependencies ++= Seq(
"org.http4s" %% "http4s-jetty" % Http4sVersion,
"org.http4s" %% "http4s-jetty-client" % Http4sVersion,
"org.http4s" %% "http4s-circe" % Http4sVersion,
"org.http4s" %% "http4s-dsl" % Http4sVersion,
"io.circe" %% "circe-generic" % CirceVersion,
"org.specs2" %% "specs2-core" % Specs2Version % "test",
"ch.qos.logback" % "logback-classic" % LogbackVersion
),
addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3"),
addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"),
)
scalacOptions ++= Seq(
"-deprecation",
"-encoding", "UTF-8",
"-language:higherKinds",
"-language:postfixOps",
"-feature",
"-Xfatal-warnings",
)
文件夹结构应该是正确的:
我做错了什么?
您没有定义程序的入口点 main class。在 JVM you have to have 上至少有一个 class 定义了
public static void main(args: String[])
在 Scala 的情况下意味着类似
object Main {
def main(args: Array[String]): Unit = {
...
}
}
如果正好有一个这样的 class,sbt 可以检测到它,如果有更多,你必须告诉 sbt 使用哪个:
mainClass := Some("name.of.my.Main")
为了调用run
。如果你 运行 JAR 这个 class 可以使用 manifest.mf
指定或显式传递。
我创建了一个网络应用程序,当我尝试 运行 和 sbt run
时,它显示:
sbt run
[warn] No sbt.version set in project/build.properties, base directory: /home/developer/scala/user-svc/target/scala-2.13
[info] Loading global plugins from /home/developer/.sbt/1.0/plugins
[info] Set current project to scala-2-13 (in build file:/home/developer/scala/user-svc/target/scala-2.13/)
[error] java.lang.RuntimeException: No main class detected.
[error] at scala.sys.package$.error(package.scala:30)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] (Compile / bgRun) No main class detected.
[error] Total time: 0 s, completed May 23, 2020, 11:44:32 PM
build.sbt
的内容是:
val Http4sVersion = "0.21.4"
val CirceVersion = "0.13.0"
val Specs2Version = "4.9.3"
val LogbackVersion = "1.2.3"
lazy val root = (project in file("."))
.settings(
organization := "io.example",
name := "user-svc",
version := "0.0.1-SNAPSHOT",
scalaVersion := "2.13.2",
libraryDependencies ++= Seq(
"org.http4s" %% "http4s-jetty" % Http4sVersion,
"org.http4s" %% "http4s-jetty-client" % Http4sVersion,
"org.http4s" %% "http4s-circe" % Http4sVersion,
"org.http4s" %% "http4s-dsl" % Http4sVersion,
"io.circe" %% "circe-generic" % CirceVersion,
"org.specs2" %% "specs2-core" % Specs2Version % "test",
"ch.qos.logback" % "logback-classic" % LogbackVersion
),
addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3"),
addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"),
)
scalacOptions ++= Seq(
"-deprecation",
"-encoding", "UTF-8",
"-language:higherKinds",
"-language:postfixOps",
"-feature",
"-Xfatal-warnings",
)
文件夹结构应该是正确的:
我做错了什么?
您没有定义程序的入口点 main class。在 JVM you have to have 上至少有一个 class 定义了
public static void main(args: String[])
在 Scala 的情况下意味着类似
object Main {
def main(args: Array[String]): Unit = {
...
}
}
如果正好有一个这样的 class,sbt 可以检测到它,如果有更多,你必须告诉 sbt 使用哪个:
mainClass := Some("name.of.my.Main")
为了调用run
。如果你 运行 JAR 这个 class 可以使用 manifest.mf
指定或显式传递。