我有一个这种结构的项目:
--resources
--src
|
|-- mypackage.main
|
|-- MainClassOne.scala
|-- MainClassTwo.scala
|-- mypackage.utils
|
|-- SomeOne.scala
|-- SomeTwo.scala
我正在尝试构建两个胖罐,每个罐都有自己的Main类。用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实现这一目标的意见。
这只是一个随意的想法,所以我可能错了,但你可以试试
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