首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅对默认根项目禁用AssemblyPlugin?

如何仅对默认根项目禁用AssemblyPlugin?
EN

Stack Overflow用户
提问于 2018-07-26 04:30:11
回答 1查看 95关注 0票数 0

假设我有以下多项目结构:

代码语言:javascript
复制
my-project/
├── build.sbt
├── app1/
├── app2/
├── app3/
├── sharedA/
└── sharedB/

我使用sbt-装配为应用程序子项目创建胖罐子。共享子项目只是库代码,因此我禁用了那些库代码的AssemblyPlugin

我使用默认根项目语法,这样就可以聚合子项目,而不必将它们全部列出。

代码语言:javascript
复制
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。我怎么才能让这个失效?

如果我从顶部禁用

代码语言:javascript
复制
name := "my-project"
disablePlugins(AssemblyPlugin)

...

然后插件被完全禁用,即使是子项目也是如此。

我知道我可以显式地声明一个根项目,这是可行的:

代码语言:javascript
复制
lazy val root = (project in file("."))
  .aggregate(app1, app2, app3, sharedA, sharedB)
  .disablePlugins(AssemblyPlugin)

...

但是,在现实中,可以有很多子项目,所以我想坚持默认的根项目风格。

EN

回答 1

Stack Overflow用户

发布于 2018-07-30 07:04:06

如果您放弃assemblyMergeStrategy中的路径,我认为它将按您的意愿运行。

代码语言:javascript
复制
assemblyMergeStrategy in assembly := { 

    case PathList("sharedA", xs @ _*) => MergeStrategy.discard
    case PathList("sharedB", xs @ _*) => MergeStrategy.discard
    ...

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51531030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档