我发现将排除项链接到添加库依赖项不起作用,即
libraryDependencies ++= {
val phantomVersion = "1.5.0"
Seq(
"net.jpountz.lz4" % "lz4" % "1.3.0",
"org.xerial.snappy" % "snappy-java" % "1.1.1.6",
"com.websudos" %% "phantom-dsl" % phantomVersion,
"com.websudos" %% "phantom-testing" % phantomVersion % Test,
"org.scalatestplus" %% "play" % "1.2.0" % Test,
"org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test
).map(_.exclude("org.slf4j", "slf4j-jdk14"))
.map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback")))
.map(_.excludeAll(ExclusionRule(organization = "QOS.ch")))
.map(_.excludeAll(ExclusionRule(artifact = "logback*")))
.map(_.excludeAll(ExclusionRule(artifact = "logback-classic")))
.map(_.exclude("ch.qos.logback", "logback-parent"))
.map(_.exclude("ch.qos.logback", "logback-core"))
.map(_.exclude("QOS.ch", "logback-parent"))
.map(_.exclude("", "logback-classic"))
}
相反,使用未记录的添加排除项SettingKey.~=
功能 (http://www.scala-sbt.org/0.13.12/api/index.html#sbt.SettingKey http://www.scala-sbt.org/0.13.12/api/index.html#sbt.SettingKey)在添加新的依赖项后的下一行,即
libraryDependencies ++= {
val phantomVersion = "1.5.0"
Seq(
"net.jpountz.lz4" % "lz4" % "1.3.0",
"org.xerial.snappy" % "snappy-java" % "1.1.1.6",
"com.websudos" %% "phantom-dsl" % phantomVersion,
"com.websudos" %% "phantom-testing" % phantomVersion % Test,
"org.scalatestplus" %% "play" % "1.2.0" % Test,
"org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test
)
libraryDependencies ~= { _.map(_.exclude("org.slf4j", "slf4j-jdk14"))
.map(_.excludeAll(ExclusionRule(organization = "ch.qos.logback")))
.map(_.excludeAll(ExclusionRule(organization = "QOS.ch")))
.map(_.excludeAll(ExclusionRule(artifact = "logback*")))
.map(_.excludeAll(ExclusionRule(artifact = "logback-classic")))
.map(_.exclude("ch.qos.logback", "logback-parent"))
.map(_.exclude("ch.qos.logback", "logback-core"))
.map(_.exclude("QOS.ch", "logback-parent"))
.map(_.exclude("", "logback-classic"))
}
我不知道为什么这会产生不同的行为,但是对于 Play Framework 2.4.3 和 SBT 0.13.8,这成功地排除了 logback-classic 和 slf4j。
请注意,您可以链接 except 和 excreAll 方法调用以避免重复调用map
所以你的代码可以简化为:
libraryDependencies ++= {
val phantomVersion = "1.5.0"
Seq(
"net.jpountz.lz4" % "lz4" % "1.3.0",
"org.xerial.snappy" % "snappy-java" % "1.1.1.6",
"com.websudos" %% "phantom-dsl" % phantomVersion,
"com.websudos" %% "phantom-testing" % phantomVersion % Test,
"org.scalatestplus" %% "play" % "1.2.0" % Test,
"org.cassandraunit" % "cassandra-unit" % "2.1.3.1" % Test
)
libraryDependencies ~= { _.map(_
.exclude("org.slf4j", "slf4j-jdk14"))
.exclude("ch.qos.logback", "logback-classic"))
}
编辑:经过进一步调查,我认为这是必需的,因为在解析 build.sbt 文件之前,libraryDependency 已经包含来自 Play 插件的 logback-classic。您可以排除plugin.sbt中的库,但如果您使用PlayScala插件enablePlugins(PlayScala)
(https://www.playframework.com/documentation/2.5.x/NewApplication https://www.playframework.com/documentation/2.5.x/NewApplication)这无法排除,因此您必须单独添加排除项。