SBT:如何将依赖项的可传递依赖项设置为;“提供”;以后?

SBT:如何将依赖项的可传递依赖项设置为;“提供”;以后?,sbt,sbt-assembly,Sbt,Sbt Assembly,我的build.sbt中有类似的内容: lazy val someDeps = Seq( libraryDependencies += "com.example" %% "foo" % "1.3.37", // more ) lazy val some_library = project.in(file("libs/somelibrary")). settings(commonSettings). settings( // project-specific settin

我的
build.sbt中有类似的内容:

lazy val someDeps = Seq(
  libraryDependencies += "com.example" %% "foo" % "1.3.37",
  // more
)

lazy val some_library = project.in(file("libs/somelibrary")).
  settings(commonSettings).
  settings(
    // project-specific settings
    libraryDependencies ++= someDeps
  )

lazy val something_with_deps_provided = project.in(file("swdp")).
  settings(commonSettings).
  settings(
    // project-specific settings
    libraryDependencies ++= someDeps.map(d => d % "provided")
  ).dependsOn(some_library)

当我现在使用
sbt assembly plugin
创建
something\u的程序集时,它仍然将依赖项放入结果jar中,忽略提供的
。是否可以将可传递依赖项设置为以后提供的
,如果可以,如何设置?

在这种情况下,可以按照中所述使用
排除依赖项
此处为SBT手册:

以你的例子:

lazy val something_with_deps_provided = project.in(file("swdp"))
  .settings(commonSettings)
  .dependsOn(some_library)
  .settings(
    // project-specific settings
    excludeDependencies ++= someDeps.map { d => 
      ExclusionRule(
        organization = d.organization,
        name         = d.name
      )
    }
  )
来自
someDeps
的依赖项将不再包含在
用deps提供的
项目的组件JAR。
你找到了吗?我想您可以排除上述依赖项,然后按照提供的方式将它们添加回去,但这有点太粗糙了。