如何在构建中设置主类?
Posted
技术标签:
【中文标题】如何在构建中设置主类?【英文标题】:How to set main class in build? 【发布时间】:2011-09-21 23:37:45 【问题描述】:在sbt run
我有多个主类选择。
我想设置一个主类,所以我写在build.sbt
:
mainClass := Some("aMainClass")
但是 sbt 失败了:
build.sbt:1: error: not found: value aMainClass
我也试过project/Project.scala
文件:
import sbt._
class ExecutableProject(info: ProjectInfo) extends DefaultProject(info)
override def mainClass = Some("aMainClass")
错误:
project/Project.scala:3: not found: type aMainClass
【问题讨论】:
【参考方案1】:主类必须与包完全合格:
Compile/mainClass := Some("myPackage.aMainClass")
这将适用于运行,它会在使用包任务时在 Manifest 中设置 Main-Class。这些任务的主类可以单独设置,如下所示:
mainClass in (Compile, run) := Some("myPackage.aMainClass")
mainClass in (Compile, packageBin) := Some("myPackage.anotherMainClass")
注意:
mainClass := Some("myPackage.aMainClass")
什么都不做。如果你把它放在你的构建文件中,你将不会收到它什么都不做的警告。
【讨论】:
请注意,mainClass in run := Some("myPackage.aMainClass")
同样什么也不做。
如果main
方法存在于一个不在任何包中的类中,例如在 App.class 位置 [...]/src/main/scala/App.class?
^^ mainClass in (Compile, run) := Some("App")【参考方案2】:
据我所知,sbt
在这里希望您的项目中有一个完全限定的类/对象名称。例如,如果你的主类是这样的:
package prog
object Main extends App
// Hic sunt dracones
那么你必须像这样给你的主课:
mainClass := Some("prog.Main")
您会收到类型错误,因为该类型不是简单地找到的。
【讨论】:
使用 SBT 0.11.2 我发现我必须在编译和运行时范围内设置主类:mainClass in (Compile, run) := Some("prog.Main")
【参考方案3】:
我的 sbt 版本是 sbt 1.5.4 (Ubuntu Java 11.0.11)。
我发现 mainClass in (Compile, run) :=Some("Hello")
在我的 build.sbt 中不起作用。
我终于在here找到了1.x版本的官方示例
// set the main class for packaging the main jar
// 'run' will still auto-detect and prompt
// change Compile to Test to set it for the test jar
Compile / packageBin / mainClass := Some("myproject.MyMain"),
// set the main class for the main 'run' task
// change Compile to Test to set it for 'test:run'
Compile / run / mainClass := Some("myproject.MyMain"),
您可以将其添加到您的设置中。它对我有用。
但我不知道如何将这些命令整合在一起。
【讨论】:
而this solution 也可以在交互模式下工作。以上是关于如何在构建中设置主类?的主要内容,如果未能解决你的问题,请参考以下文章