如何使用 sbt 程序集传递 mainClass 参数

How to pass mainClass argument using sbt assembly

不确定是否可能,但我希望有几个主要的 类 并且我不希望在我 运行 sbt assembly[ 之前每次都更改 sbt.build =14=]

有没有办法在调用 assembly 时传递 mainClass 参数? 像: project> assembly -mainClass someApp.scala ?

谢谢

所以我想出了一些解决方案(实际上并没有在终端中指定 mainClass)

我有一个 project/module(它是一个 sbt 多项目)并且基本上复制了旧模块,只做了一些改动,包括 mainClass

lazy val oldProject = (project in file("modules/old-project"))
...

lazy val newProject = oldProject.copy(
  id = s"${oldProject.id}-new"
).settings(
    mainClass in assembly := Some("someNewApp"),
    assemblyJarName in assembly := "someNew.jar",
    target := file("modules/some-new-project")
  )


lazy val root = (project in file("."))
  .settings(commonSettings)
  .dependsOn(..., oldProject, newProject, ...)
  .aggregate(..., oldProject, newProject, ...)

现在我可以 select sbt 中的新 project/module 和 运行 assembly 在新的目标文件夹中生成一个 jar。

这基本上是假装一个模块有 2 个模块。

注意:我还没有 运行 罐子。

我会尝试类似的方法:

sbt "set mainClass in assembly := Some(\"com.some.Class\")" assembly

基本上,您应该能够使用这样的语句在任何构建范围内定义任何键。只需注意转义引号。