我有两个Sbt项目,my-commons和my-service。
与依赖
libraryDependencies ++= Seq(
"nz.ac.waikato.cms.weka" % "attributeSelectionSearchMethods" % "1.0.7",
"de.bwaldvogel" % "liblinear" % "1.95"
"io.dropwizard.metrics" % "metrics-graphite" % "3.1.2",
"com.github.nscala-time" %% "nscala-time" % "2.2.0",
"org.apache.hive" % "hive-jdbc" % "1.1.0-cdh5.4.5",
"org.apache.hadoop" % "hadoop-common" % "2.6.0-cdh5.4.5",
"org.apache.hadoop" % "hadoop-hdfs" % "2.6.0-cdh5.4.5"
)
与依赖
libraryDependencies ++= {
Seq(
"ch.qos.logback" % "logback-classic" % "1.0.13",
"io.spray" %% "spray-httpx" % "1.3.3",
"io.spray" %% "spray-json" % "1.3.2",
"io.spray" %% "spray-can" % "1.3.3",
"io.spray" %% "spray-routing" % "1.3.3",
"io.spray" %% "spray-testkit" % "1.3.3" % "test",
"com.typesafe.akka" %% "akka-actor" % "2.3.9",
"com.typesafe.akka" %% "akka-testkit" % "2.3.9" % "test",
"org.specs2" %% "specs2-core" % "2.3.11" % "test",
"org.json4s" %% "json4s-native" % "3.2.11",
"org.json4s" %% "json4s-ext" % "3.2.11",
"org.mockito" % "mockito-all" % "1.8.4" % "test",
"com.mycommon.projects" % "my-commons" % "1.0.+"
)
我正在使用程序集sbt插件
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
我在sbt组装时遇到错误:
at java.lang.Thread.run(Thread.java:745)
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /home/me/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.7.jar:META-INF/maven/org.slf4j/slf4j-api/pom.properties
[error] /home/me/.ivy2/cache/com.twitter/parquet-hadoop-bundle/jars/parquet-hadoop-bundle-1.5.0-cdh5.4.5.jar:META-INF/maven/org.slf4j/slf4j-api/pom.properties
我试图从构建中排除这些库,但没有成功。
libraryDependencies ~= { _ map {
case m if m.organization.startsWith("org.apache") || m.organization.startsWith("com.twitter") || m.name.contains("parquet") =>
m.exclude("org.slf4j","slf4j-api").
exclude("org.slf4j","slf4j-log4j12")
case m => m
}}
可能我做错了...我该如何解决这个依赖地狱?
在您的情况下,文件存在不同的内容,因此无法与SBT程序集插件合并。
两种方法可能
使用程序集插件的合并过滤器指定要保留的文件,例如
val sharedMergeStrategy: (String => MergeStrategy) => String => MergeStrategy =
(old: (String) => MergeStrategy) => {
case x if x.startsWith("META-INF/ECLIPSEF.RSA") => MergeStrategy.last
case x if x.startsWith("META-INF/mailcap") => MergeStrategy.last
case x if x.endsWith("plugin.properties") => MergeStrategy.last
case x => old(x)
}
有关如何排除传递性依赖项的信息,请参见http://www.scala-sbt.org/0.13/docs/Library-Management.html#Exclude+Transitive+Dependencies。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句