由于StaticLoggerBinder.class中的重复数据删除错误,Scala SBT程
我的问题是我不能再使用sbt-assembly插件了,因为在这个项目的几个人之间徘徊了某种依赖合并问题.
运行’sbt assembly’时的问题:
… 等等 I am using SBT-assembly 0.13.0,and here is the build.sbt name := "metamorphosis" version := "0.10.0" scalaVersion := "2.10.4" lazy val common = RootProject(file("../")) val main = Project(id = "bridge",base = file(".")).dependsOn(common) //excludeDependencies += "org.apache.logging.log4j" resolvers ++= Seq( // "Akka Snapshot Repository" at "http://repo.akka.io/snapshots/","Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases/","Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/" ) libraryDependencies ++= Seq( "com.github.nscala-time" %% "nscala-time" % "1.8.0","com.sclasen" %% "akka-kafka" % "0.0.10" % "compile","com.typesafe.akka" %% "akka-actor" % "2.3.2","org.codehaus.groovy" % "groovy" % "2.3.7","com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2","ch.qos.logback" % "logback-classic" % "1.1.2","ch.qos.logback.contrib" % "logback-json-classic" % "0.1.2","ch.qos.logback.contrib" % "logback-jackson" % "0.1.2","org.slf4j" % "slf4j-api" % "1.7.7","com.fasterxml.jackson.core" % "jackson-databind" % "2.2.2","org.clapper" %% "argot" % "1.0.3","com.typesafe" % "config" % "1.2.1","net.ceedubs" %% "ficus" % "1.0.1","com.typesafe.play" %% "anorm" % "2.3.6","org.json4s" %% "json4s-native" % "3.2.10","org.json4s" %% "json4s-jackson" % "3.2.10","com.github.tototoshi" %% "scala-csv" % "1.1.2","org.scalatest" %% "scalatest" % "2.2.2","junit" % "junit" % "4.11","org.apache.kafka" %% "kafka" % "0.8.1.1" exclude("javax.jms","jms") exclude("com.sun.jdmk","jmxtools") exclude("com.sun.jmx","jmxri") exclude("org.slf4j","slf4j-simple") ) mainClass in assembly := Some("com.company.kafka.agent.MetamorphosisActor") 有关如何解决如何修复此合并问题的任何线索? 谢谢! 解决方法
问题是多个依赖项会导致slf4j传递依赖,从而导致冲突.最好的方法是排除传递依赖,而不是使用SBT程序集的合并策略来解决冲突.
首先,您需要可视化slf4j的来源(适用于所有顶级依赖项).您可以使用此sbt-dependency-graph之类的工具来获取所有依赖项的可视化图表.或者,您可以从SBT命令提示符中探索SBT设置,或使用像this one或this one这样的maven站点. 找到重复的依赖项后,使用与在构建文件中使用的方法相同的方法.只留下单个slf4j传递依赖.您还可以排除所有slf4j传递依赖项(请参阅here how)并在顶层手动添加该slf4j依赖项. 请注意,如果您的依赖项需要多个不同版本的slf4j,那么选择适用于所有情况的单个版本可能会有问题.取决于二进制兼容性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |