假设我有以下多项目结构:
my-project/
├── build.sbt
├── app1/
├── app2/
├── app3/
├── sharedA/
└── sharedB/我使用sbt-装配为应用程序子项目创建胖罐子。共享子项目只是库代码,因此我禁用了那些库代码的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时,这主要是起作用的:我为_app_s获得了程序集jars,为_shared_s获得了none,然而,我也得到了一个不需要的sbt assembly。我怎么才能让这个失效?
如果我从顶部禁用
name := "my-project"
disablePlugins(AssemblyPlugin)
...然后插件被完全禁用,即使是子项目也是如此。
我知道我可以显式地声明一个根项目,这是可行的:
lazy val root = (project in file("."))
.aggregate(app1, app2, app3, sharedA, sharedB)
.disablePlugins(AssemblyPlugin)
...但是,在现实中,可以有很多子项目,所以我想坚持默认的根项目风格。
发布于 2018-07-30 07:04:06
如果您放弃assemblyMergeStrategy中的路径,我认为它将按您的意愿运行。
assemblyMergeStrategy in assembly := {
case PathList("sharedA", xs @ _*) => MergeStrategy.discard
case PathList("sharedB", xs @ _*) => MergeStrategy.discard
...
}https://stackoverflow.com/questions/51531030
复制相似问题