gpt4 book ai didi

scala - 构建.sbt : exclude dependencies from dependsOn submodule

转载 作者:行者123 更新时间:2023-12-01 19:21:49 34 4
gpt4 key购买 nike

有一个类似的问题here但该解决方案在 sbt v1.x 中不起作用

在构建 sbt 中,详细记录了如何在通过 libraryDependencies 添加时排除依赖项:

libraryDependencies += "log4j" % "log4j" % "1.2.15" exclude("javax.jms", "jms")

或防止传递依赖:

libraryDependencies += "org.apache.felix" % "org.apache.felix.framework" % "1.8.0" intransitive()

但我的问题是,在像这样的多模块项目中声明子模块的 dependsOn 依赖项时,如何(以及是否)可以完成此操作:

lazy val core = project.dependsOn(util)

我该如何做这样的事情(下面示例中的无效代码)以防止通过 util 引入传递依赖项:

lazy val core = project.dependsOn(util exclude("javax.jms", "jms"))

还有如何,更重要的是,如何排除通过 util 引入多模块项目中另一个子模块的传递依赖(其中 sub3 是另一个子模块)在同一个 build.sbt 中声明的子模块项目):

lazy val core = project.dependsOn(util exclude sub3)

最佳答案

实现的方法是使用excludeDependenciesSettingKey。

一个简短的例子:

excludeDependencies ++= Seq(
ExclusionRule("commons-logging", "commons-logging")
)

Source

<小时/>

如果您碰巧将依赖项定义为 val(就像我一样),您可能会发现根据依赖项定义排除很有用。为此,您需要这个简单的方法:

def excl(m: ModuleID): InclExclRule = InclExclRule(m.organization, m.name)

并且它允许轻松排除:

val theLib = "com.my.lib" % "artifact" % "version"

lazy val `projectA` = (project in file("projectA"))
.settings(
...
libraryDependencies ++= Seq(
theLib
)
)

lazy val `projectB` = (project in file("projectB"))
.settings(
...
libraryDependencies ++= Seq(
...
),
excludeDependencies ++= Seq(
excl(theLib)
)
)
.dependsOn(projectA)

关于scala - 构建.sbt : exclude dependencies from dependsOn submodule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224680/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com