我的问题是,我不能再使用sbt-汇编插件,因为某种依赖合并问题悄悄出现,在从事这个项目的几个人之间。
运行“sbt程序集”时出现的问题:
错误3在合并过程中遇到错误,/Users/aris.vlasakakis/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.2.jar:org/slf4j/impl/StaticLoggerBinder.class /Users/aris.vlasakakis/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar:org/slf4j/impl/StaticLoggerBinder.class不重复: java.lang.RuntimeException: java.lang.RuntimeException: during :不同的文件内容如下:在以下文件中找到的文件内容: /Users/aris.vlasakakis/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.2.jar:org/slf4j/impl/StaticMDCBinder.class /Users/aris.vlasakakis/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar:org/slf4j/impl/StaticMDCBinder.class de425:在以下文件中找到不同的文件内容:/Users/aris.vlasakis/. in 2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.2.jar:org/slf4j/impl/StaticMarkerBinder.class /Users/aris.vlasakakis/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar:org/slf4j/impl/StaticMarkerBinder.class at sbtassembly.Assembly$.applyStrategies(Assembly.scala:140) at sbtassembly.Assembly$.x$1$lzycompute$1(Assembly.scala:25)在sbtassembly.Assembly$.x$1$1(Assembly.scala:23) at sbtassembly.Assembly$.stratMapping$lzycompute$1(Assembly.scala:23) at sbtassembly.Assembly$.stratMapping$1(Assembly.scala:23) at sbtassembly.Assembly$.inputs$lzycompute$1(Assembly.scala:67) at sbtassembly.Assembly$.inputs$1(Assembly.scala:57)
..。诸若此类
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")有什么线索可以说明我怎么解决合并问题吗?
谢谢!
发布于 2017-07-19 12:56:11
先前的答案给出了所有所需的反馈,但实际上并没有给出任何解决方案或尝试的步骤。
我的错误:
[error] (project/*:assembly) deduplicate: different file contents found in the following:
[error] /home/user/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.2.3.jar:org/slf4j/impl/StaticLoggerBinder.class
[error] /home/user/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticLoggerBinder.class
[error] deduplicate: different file contents found in the following:
[error] /home/user/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.2.3.jar:org/slf4j/impl/StaticMDCBinder.class
[error] /home/user/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticMDCBinder.class
[error] deduplicate: different file contents found in the following:
[error] /home/user/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.2.3.jar:org/slf4j/impl/StaticMarkerBinder.class
[error] /home/user/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticMarkerBinder.class推荐方式
追踪相互冲突的依赖性。例如,我不希望这些类:
org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticLoggerBinder.class
org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticMDCBinder.class
org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.7.10.jar:org/slf4j/impl/StaticMarkerBinder.class调用sbt (并确保使用依赖关系图插件):
whatDependsOn org.slf4j slf4j-log4j12 1.7.10返回一个列表:
[info] org.slf4j:slf4j-log4j12:1.7.10
[info] +-org.apache.hadoop:hadoop-auth:2.8.0
[info] | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +-com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.zookeeper:zookeeper:3.4.6
[info] +-org.apache.curator:curator-client:2.7.1
[info] | +-org.apache.curator:curator-framework:2.7.1
[info] | | +-org.apache.curator:curator-recipes:2.7.1
[info] | | | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | | | +-com.github.atais:test_2.11:0.0.3 [S]
[info] | | |
[info] | | +-org.apache.hadoop:hadoop-auth:2.8.0
[info] | | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | | +-com.github.atais:test_2.11:0.0.3 [S]
[info] | |
[info] | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +-com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.curator:curator-framework:2.7.1
[info] | +-org.apache.curator:curator-recipes:2.7.1
[info] | | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | | +-com.github.atais:test_2.11:0.0.3 [S]
[info] | |
[info] | +-org.apache.hadoop:hadoop-auth:2.8.0
[info] | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +-com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.curator:curator-recipes:2.7.1
[info] | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +-com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.hadoop:hadoop-auth:2.8.0
[info] | +-org.apache.hadoop:hadoop-common:2.8.0
[info] | +-com.github.atais:test_2.11:0.0.3 [S]
[info] |
[info] +-org.apache.hadoop:hadoop-common:2.8.0
[info] +-com.github.atais:test_2.11:0.0.3 [S]我需要跟踪hadoop-common依赖项,因为它是连接com.github.atais:test_2.11:0.0.3和不需要的org.slf4j:slf4j-log4j12:1.7.10的依赖项。
并加以修改:
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "2.8.1" exclude("org.slf4j", "slf4j-log4j12")易道
只需为冲突路径添加合并策略标志:
assemblyMergeStrategy in assembly := {
...
case PathList("org", "slf4j", xs@_*) => MergeStrategy.first
case x => (assemblyMergeStrategy in assembly).value(x)
}发布于 2015-03-25 03:32:08
问题是,不止一个依赖项会导致slf4j传递依赖,这会导致冲突。最好的方法是排除这种传递依赖关系,而不是使用SBT程序集的合并策略来解决冲突。
首先,您需要可视化slf4j来自何处(对于所有顶级依赖项)。您可以使用像这个依赖关系图这样的工具来获得所有依赖关系的可视化图表。或者,您可以从SBT命令提示符或使用maven站点(如这一个或这一个 )探索SBT设置。
找到重复的依赖项后,使用exclude的方式与在构建文件中使用的方式相同。只保留单个slf4j传递依赖项。您还可以排除所有slf4j传递依赖项(请参阅这里方法),并在顶层手动添加slf4j依赖项。
注意,如果您的依赖关系需要多个不同版本的slf4j,那么选择一个适用于所有情况的单一版本可能会有问题。取决于二进制兼容性。
https://stackoverflow.com/questions/29245669
复制相似问题