Сборка Sbt - несколько банок с различными основными классами из одного проекта - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть проект с такой структурой:

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

Я пытаюсь построить два толстых фляги, каждый из которых имеет свой основной класс.Скажите jarOne.jar с MainClassOne и jarTwo.jar с MainClassTwo

Ниже приведено содержимое моего файла 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.

1 Ответ

0 голосов
/ 18 сентября 2018

Это просто случайная идея, поэтому я могу ошибаться, но вы можете попробовать

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
...