【问题标题】: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

如何在构建中设置主类?

【问题讨论】:

    标签: sbt


    【解决方案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"),
    

    您可以将其添加到您的设置中。它对我有用。

    但我不知道如何将这些命令整合在一起。

    【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多