如何在构建中设置主类?

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 也可以在交互模式下工作。

以上是关于如何在构建中设置主类?的主要内容,如果未能解决你的问题,请参考以下文章

抑制 sbt-assembly 中的主类

我应该如何在 Gradle 中为 Spring Boot 应用程序设置主类?

如何解决Eclipse下“找不到或无法加载主类”的错误?

如何解决Eclipse下“找不到或无法加载主类”的错误

设置在主类的子类中创建的 PyQt5 小部件的属性

即使在添加类路径和主类之后也没有主清单属性 maven 构建