播放 2.3.8 sbt 不包括 logback

2024-03-30

我很难排除logback从我的play 2.3.8测试运行来看。我尝试了很多排除规则,但似乎没有任何效果。我在我的依赖树中也找不到它。我的 sbt 文件中的片段:

[...]
resolvers ++= Seq(
  "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/",
  "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/",
  "Sonatype repo"                    at "https://oss.sonatype.org/content/groups/scala-tools/",
  "Sonatype releases"                at "https://oss.sonatype.org/content/repositories/releases",
  "Sonatype snapshots"               at "https://oss.sonatype.org/content/repositories/snapshots",
  "Sonatype staging"                 at "http://oss.sonatype.org/content/repositories/staging",
  "Java.net Maven2 Repository"       at "http://download.java.net/maven/2/",
  "Twitter Repository"               at "http://maven.twttr.com",
  "Websudos releases"                at "http://maven.websudos.co.uk/ext-release-local"
)

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"))
}

由于某种原因它不在依赖关系树中:

$ activator "inspect tree test" |grep -i qos |wc -l
   0
$ activator "inspect tree test" |grep -i logback |wc -l
   0

然而,当我运行测试时,它出现了!

$ activator test
[...]
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/X/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

我已经无计可施了。帮助。


我发现将排除项链接到添加库依赖项不起作用,即

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)这无法排除,因此您必须单独添加排除项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

播放 2.3.8 sbt 不包括 logback 的相关文章

随机推荐

  • 创建索引需要很长时间

    我在 MongoDB 中创建了一个集合 其中包含11446615文件 每个文档具有以下形式 id ObjectId 4e03dec7c3c365f574820835 httpReferer http www somewebsite pl a
  • wamp 本地主机上的 Amazon S3 SSL 错误

    我尝试在本地主机上使用 PHP Amazon S3 进行测试 但不断收到相同的错误 致命错误 未捕获异常 cURL Exception 消息为 cURL 资源 资源 ID 69 cURL 错误 SSL 证书问题 请验证 CA 证书没问题 详
  • java 的 System.getProperty("user.dir") 在 .NET 中的等价物是什么?

    我试图获取单元测试中文件的完整路径 该文件位于项目的文件夹中 我尝试使用 Directory GetCurrentDirectory 但这会返回我的测试正在运行的目录 我想要项目 或解决方案 的目录 而不必在其中进行硬编码 然后我可以附加文
  • angular2:如何将对象复制到另一个对象中

    请帮助我使用 Angular 2 将对象复制到另一个对象中 在 Angular 中 我使用 angular copy 将对象复制到旧对象的松散引用 但是 当我在 Angular 2 中使用相同的方法时 出现以下错误 错误 角度未定义 Sol
  • React Router v4 - 如何防止重定向循环?

    我想要实现的目标是拥有我的App如果状态的 uid 为 null 则组件重定向到 login 路由 重定向工作正常 如果 uid 为空 它将始终将您重定向到 login 但问题是一旦您进入 login 路线 它就不会停止重定向 抛出的错误是
  • 我应该使用什么标准来评估 Perl“应用程序服务器”(mod_perl 替代品)?

    简洁版本 我应该使用什么标准来评估 Perl 应用程序服务器 mod perl 替代品 的可能候选者 我们正在寻找某种框架 它允许重复执行各种 Perl 程序 作为服务 而不会产生以下成本 每次执行时重新启动 perl 解释器一次 每次执行
  • 如何在python 3中按本地语言对拉丁语进行排序?

    在很多情况下 用户的语言不是 latin 脚本 示例包括 希腊语 俄语 中文 在大多数情况下 排序是通过 首先对特殊字符和数字进行排序 虽然是当地语言的数字 其次是当地语言文字中的单词 最后是一般 utf 排序规则中的任何非本地字符 例如法
  • 如何在 python-igraph 中种子图生成器?

    有没有什么方法可以为使用 python igraph 生成的以下 Watts Strogatz 图提供种子 以便每次运行脚本时我都能得到相同的 SW 图实现 import igraph graph igraph Graph Watts St
  • 学习 VHDL 的最佳方法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从列表中选择随机单词?

    我无法从另一个文件的列表中随机选择单词 事实上我什至无法让它选择任何单词 我不确定如何连接这两个文件 希望有人能帮忙 我是初学者 所以请尽可能简单地解释一下 我有 2 个文件 一个名为 program cs 另一个名为 WordList c
  • 在版本 4 中将节点动态添加到 D3 Force Layout

    我正在尝试实现一个简单的力布局 其中可以动态添加和删除节点 没有链接 我成功地在 D3 版本 3 中实现了这个概念 但我无法将其转换为版本 4 添加和更新节点后 模拟冻结 传入的圆圈绘制在 svg 的左上角 有人知道为什么会这样吗 谢谢你的
  • 使用预处理器在 C 中进行模板化

    我想知道为什么我从来没有见过下面的方式来实现模板 之前在C中 我的想法是让预处理器进行模板工作 容器 h ifndef TEMPLATE TYPE error missing decalaration TEMPLATE TYPE endif
  • R 中心调色板为 0

    我想创建一个以 0 为中心的色带 以下代码 library raster librayr RColorBrewer xmin 124 413 xmax 66 883 ymin 25 9425 ymax 48 9885 nrows 215 n
  • 未捕获的语法错误:实时但不在本地服务器上出现意外的令牌 B

    所以我正在制作一些ajax帖子 它似乎在本地主机上工作正常 但是当我将其发布到亚马逊上的ec2服务器时 我得到 Uncaught SyntaxError Unexpected token B 这似乎表明 JSON 解析失败 完全相同的数据库
  • 使用 Samsung Galaxy Tab 附加组件将如何影响/限制我的 Android Market 部署?

    我已经针对上述附加组件提供的新构建目标运行了我的 Android 应用程序here http innovator samsungmobile com galaxyTab do 这似乎在模拟器中正常工作 但现在我非常不确定在向市场交付应用程序
  • Math.sqrt Java 的时间复杂度

    Java 中 math sqrt 实现的时间复杂度是多少 Java 以某种技术实现了时间复杂度 我正在尝试确定该技术的时间复杂度 在大多数情况下 Java 尝试使用 智能功率 算法 这会导致时间复杂度为 O log n 智能用电算法 htt
  • vhdl代码(for循环)

    描述 我想编写 vhdl 代码来查找数组 A 中的最大整数 该数组是一个由 20 个整数组成的数组 问题 我的算法应该是什么样子 以输入顺序语句的位置 我的VHDL代码 highnum for i in 0 to 19 loop i 0 i
  • Objective-C:标量属性默认为原子?

    一位朋友告诉我 标量属性 BOOL NSInteger 等 的 property 默认值是非原子的 IE property BOOL followVenmo 默认为 property nonatomic BOOL followVenmo 但
  • 使用反射调用方法

    是否可以通过类的反射来调用方法 class MyObject some methods public void fce call another method of this object via reflection 谢谢 绝对地 imp
  • 播放 2.3.8 sbt 不包括 logback

    我很难排除logback从我的play 2 3 8测试运行来看 我尝试了很多排除规则 但似乎没有任何效果 我在我的依赖树中也找不到它 我的 sbt 文件中的片段 resolvers Seq Typesafe repository snaps