Sbt assembly - 具有来自单个项目的不同Main类的多个jar

问题描述 投票:0回答:1

我有一个这种结构的项目:

--resources
--src
     |
     |-- mypackage.main
                    |
                    |-- MainClassOne.scala
                    |-- MainClassTwo.scala
     |-- mypackage.utils
                    |
                    |-- SomeOne.scala
                    |-- SomeTwo.scala

我正在尝试构建两个胖罐,每个罐都有自己的Main类。用jarOne.jarMainClassOnejarTwo.jarMainClassTwo

以下是我的sbt文件的内容:

lazy val assemblySettings = Seq(
  assemblyMergeStrategy in assembly := {
    case "application.conf"            => MergeStrategy.concat
    case "defaults.conf"            => MergeStrategy.concat
    case PathList("UnusedStubClass.class") => MergeStrategy.discard
    case x =>  val oldStrategy = (assemblyMergeStrategy in assembly).value
      oldStrategy(x)

  }
)

lazy val BuildOne = (project in file("."))
  .settings(mainClass in Compile := Some("mypackage.main.MainClassOne"))
  .settings(mainClass in assembly := Some("mypackage.main.MainClassOne"))
  .settings(assemblyJarName in assembly := "jarOne.jar")
  .settings(myMetaSettings: _*)
  .settings(myScalaSettings: _*)
  .settings(resolvers ++= myRepositories)
  .settings(libraryDependencies ++= myDependencies)
  .enablePlugins(AssemblyPlugin)
  .settings(assemblySettings: _*)

lazy val BuildTwo = (project in file("."))
  .settings(mainClass in Compile := Some("mypackage.main.MainClassTwo"))
  .settings(mainClass in assembly := Some("mypackage.main.MainClassTwo"))
  .settings(assemblyJarName in assembly := "jarTwo.jar")
  .settings(myMetaSettings: _*)
  .settings(myScalaSettings: _*)
  .settings(resolvers ++= myRepositories)
  .settings(libraryDependencies ++= myDependencies)
  .enablePlugins(AssemblyPlugin)
  .settings(assemblySettings: _*)

但是,我注意到这只会产生一个罐子 - jarTwo.jar - 而不是像我原先希望的那样。我们的想法是能够从同一个项目中构建jar(具有不同的名称和主类)。欣赏如何使用sbt实现这一目标的意见。

scala sbt-assembly
1个回答
0
投票

这只是一个随意的想法,所以我可能错了,但你可以试试

val AlternativeAssembly: Configuration = config("alt") extend Assembly describedAs "Alternative assembly config"

...

project
  .settings(Assembly / mainClass := Some("package.Main1"))
  .settings(AlternativeAssembly / mainClass := Some("package.Main2"))

您将运行:

project/assembly
project/alt:assembly
© www.soinside.com 2019 - 2024. All rights reserved.