简体   繁体   English

sbt-assembly排除依赖依赖

[英]sbt-assembly exclude dependsOn dependencies

I have a project with a few subprojects, and many dependencies, One subproject will have most development (app) and generating the full jar takes time. 我有一个项目,其中包含几个子项目,并且有许多依赖项,一个子项目将具有最多的开发(应用程序),并且生成完整的jar需要时间。 So I want to split the fat-jar generation into 2 jars: 所以我想把胖子罐子分成两个罐子:

  • deps a fat-jar 沾上一个胖子
  • app a lean-jar 应用精益罐

I was hoping to create a deps project like: 我希望创建一个deps项目,例如:

lazy val deps = (project in file("deps"))
 .settings(
   libraryDependencies ++= commonDependencies,
   assemblyJarName in assembly := "deps.jar",
   assemblyMergeStrategy in assembly := {
     case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
     case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
     case m if m.toLowerCase.startsWith("meta-inf/services/") => MergeStrategy.filterDistinctLines
     case m if m.toLowerCase.endsWith(".dct") => MergeStrategy.first
     case "reference.conf" => MergeStrategy.concat
     case _ => MergeStrategy.first
   }
).dependsOn(
   measurement,
   streaming,
   domain
)

and my app project like: 和我的应用程序项目,如:

lazy val app = (project in file("my-app"))
  .settings(clientEventSettings)
  .settings(noPublishSettings)
  .settings(
    assemblyJarName in assembly := "my-app.jar",
    assemblyMergeStrategy in assembly := {
      case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
      case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
      case m if m.toLowerCase.startsWith("meta-inf/services/") => MergeStrategy.filterDistinctLines
      case m if m.toLowerCase.endsWith(".dct") => MergeStrategy.first
      case "reference.conf" => MergeStrategy.concat
      case _ => MergeStrategy.first
    })
  .dependsOn(  //<- but do not package??
    measurement,
    streaming,
    messagingDomain,
    messagingKafkaToolkit,
    domain,
    analyticsWebtrekk,
    commons
  )

compile-wise my-app project is dependent on the other subprojects (deps) but it should be scope provided because I don't want it to be packaged by sbt-assembly. 面向编译的my-app项目依赖于其他子项目(deps),但应provided范围provided因为我不希望它由sbt-assembly打包。

I'm going to try using the libraryDependencies, but I think that means cloning the commonDependencies, all with scope provided . 我打算用libraryDependencies尝试,但我认为这意味着克隆commonDependencies,所有范围provided

sbt-assembly的自述文件提供了答案:在本节中: Splitting your project and deps JARs

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false, includeDependency = false)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM