IUn*_*own 9 dependencies scala build sbt
这里有一个类似的问题,但该解决方案在 sbt v1.x 中不起作用
在 build sbt 中,详细记录了如何在添加时排除依赖项libraryDependencies
:
libraryDependencies += "log4j" % "log4j" % "1.2.15" exclude("javax.jms", "jms")
Run Code Online (Sandbox Code Playgroud)
或防止传递依赖:
libraryDependencies += "org.apache.felix" % "org.apache.felix.framework" % "1.8.0" intransitive()
Run Code Online (Sandbox Code Playgroud)
但我的问题是dependsOn
在像这样的多模块项目中声明子模块的依赖项时如何(以及是否)可以做到这一点:
lazy val core = project.dependsOn(util)
Run Code Online (Sandbox Code Playgroud)
我将如何做这样的事情(下面示例中的无效代码)以防止通过util
以下方式引入传递依赖:
lazy val core = project.dependsOn(util exclude("javax.jms", "jms"))
Run Code Online (Sandbox Code Playgroud)
以及如何,更重要的是,如何排除对多模块项目中另一个子模块的传递依赖util
(在sub3
同一个 build.sbt 中声明的另一个子模块项目在哪里):
lazy val core = project.dependsOn(util exclude sub3)
Run Code Online (Sandbox Code Playgroud)
方法是使用excludeDependencies
SettingKey。
一个简短的例子:
excludeDependencies ++= Seq(
ExclusionRule("commons-logging", "commons-logging")
)
Run Code Online (Sandbox Code Playgroud)
如果您碰巧将依赖项定义为val
(像我一样),您可能会发现根据依赖项定义排除很有用。为此,您需要这个简单的方法:
def excl(m: ModuleID): InclExclRule = InclExclRule(m.organization, m.name)
Run Code Online (Sandbox Code Playgroud)
并且它允许轻松排除:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2371 次 |
最近记录: |