如何在Sbt中排除传递依赖(在Assembly插件的上下文中)?

朱莉亚斯

我有两个Sbt项目,my-commonsmy-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程序集插件合并。

两种方法可能

方法1:

使用程序集插件的合并过滤器指定要保留的文件,例如

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在测试上下文中检查sbt?

如何在 React 的上下文中传递函数?

使用Spring Boot @WebMvcTest测试时如何从我的上下文中排除其他@Controller

如何从测试应用程序上下文中排除 Spring Boot 应用程序 bean?

如何从部署的上下文路径中排除路径?

如何在Jenkins Job DSL插件的上下文中使用共享/通用的常规方法

在SpringBootApplicationTest中从应用程序上下文中排除EurekaClient Bean

如何在基于类的视图的上下文中传递给Django中的模板?

如何在Handlebars模板上下文中传递JQuery实例?

如何在SBT中排除库的所有传递依赖项?

如何在当前上下文中设置跨度上下文?

如何在特定上下文中使用querySelectorAll

如何在临时上下文中回滚更改?

如何在反应上下文中反转状态

如何在Spring上下文中注入模拟

如何在servlet上下文中引用bean的属性?

如何在测试上下文中使用 LocalizationUtility

如何在“ remoteJenkinsFileWorkflowMultiBranchProjectFactory”上下文中描述“ remoteJenkinsFileSCM()”的值?

如何在上下文中存储vars。黄瓜

如何在上下文中运行协程?

如何在TextWatcher方法上下文中获取View?

如何在HTML上下文中上传文件

如何在不同的上下文中使用变量?

如何在反应上下文中保持值?

如何在最终的sbt程序集插件中排除jar

如何在安全上下文中使用@Autowiring从应用程序上下文中调用bean

如何在不传递ID的情况下确定在哪个Java Applet上下文中运行?

我如何在响应本机上下文中将环境变量传递给Android构建

如何在LuisActionDialog传递上下文中从一种意图跳到另一种