Sbt 如何仅为默认根项目禁用AssemblyPlugin?
假设我有以下多项目结构:Sbt 如何仅为默认根项目禁用AssemblyPlugin?,sbt,Sbt,假设我有以下多项目结构: my-project/ ├── build.sbt ├── app1/ ├── app2/ ├── app3/ ├── sharedA/ └── sharedB/ 我用于为应用程序子项目创建胖jar。共享的子项目只是库代码,所以我禁用了AssemblyPlugin 我使用这种语法,这样子项目就可以聚合,而不必全部列出 name := "my-project" lazy val app1 = (project in file("app1")) .dependsOn
my-project/
├── build.sbt
├── app1/
├── app2/
├── app3/
├── sharedA/
└── sharedB/
我用于为应用程序子项目创建胖jar。共享的子项目只是库代码,所以我禁用了AssemblyPlugin
我使用这种语法,这样子项目就可以聚合,而不必全部列出
name := "my-project"
lazy val app1 = (project in file("app1"))
.dependsOn(sharedA)
lazy val app2 = (project in file("app2"))
.dependsOn(sharedB)
lazy val app3 = (project in file("app3"))
.dependsOn(sharedA, sharedB)
lazy val sharedA = (project in file("sharedA"))
.disablePlugins(AssemblyPlugin)
lazy val sharedB = (project in file("sharedB"))
.disablePlugins(AssemblyPlugin)
当我运行sbt assembly
时,这主要是有效的:我为应用程序获取汇编jar,而为共享项获取一个。然而,我也得到了一个我不需要的我的projectassembly.jar。如何禁用此功能
如果我从顶部禁用
name := "my-project"
disablePlugins(AssemblyPlugin)
...
然后该插件被完全禁用,即使对于子项目也是如此
我知道我可以显式地声明根项目,这是可行的:
lazy val root = (project in file("."))
.aggregate(app1, app2, app3, sharedA, sharedB)
.disablePlugins(AssemblyPlugin)
...
但是,实际上,可能有很多子项目,因此我希望坚持默认的根项目样式。如果您放弃
assemblyMergeStrategy
中的路径,我认为它将按照您的意愿运行
assemblyMergeStrategy in assembly := {
case PathList("sharedA", xs @ _*) => MergeStrategy.discard
case PathList("sharedB", xs @ _*) => MergeStrategy.discard
...
}