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

时间:2018-04-19 16:03:49

标签: sbt sbt-assembly

不确定是否可行,但我希望有几个主要课程,我不希望每次在运行sbt assembly之前更改sbt.build

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

由于

2 个答案:

答案 0 :(得分:3)

我会尝试类似的事情:

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

基本上你应该能够在任何构建范围中使用这样的语句定义任何键。只需注意逃避报价。

答案 1 :(得分:0)

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

我有一个项目/模块(它是一个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, ...)

现在我可以在sbt中选择新的项目/模块并运行assembly,在新的目标文件夹中生成一个jar。

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

注意:我还没有运行jar。