首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证sbt-assembly IntelliJ中的着色

验证sbt-assembly IntelliJ中的着色
EN

Stack Overflow用户
提问于 2017-11-22 13:45:15
回答 1查看 579关注 0票数 5

我正在尝试将Apache v2.2.0,GeoIP2 2.11.8与Apache v2.10.0Java API (https://github.com/maxmind/GeoIP2-java)一起使用。问题是,Apache Spark在它的pom文件中有jackson-databind artifacev2.6.5,因为GeoIP2需要jackson-databind 2.9.2的最小版本。因此,我尝试使用sbt-assembly对关联库进行着色。我在AWS-EMR上使用了spark-submit命令,但我一直收到以下依赖错误:

代码语言:javascript
复制
 Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V at com.maxmind.db.Decoder.decodeArray(Decoder.java:272)

出现上述异常的主要原因是jackson-databind v2.6.5是从Spark中拉出的,而不是使用2.9.2。有没有人能告诉我我的着色过程是否正确,或者我是否遗漏了什么?如何在IntelliJ中验证com.fasterxml.jackson.core.*是否真的着色为shaded.jackson.core.*?我尝试过使用sbt-dependencyTree插件,但只显示了依赖项com.fasterxml.jackson.core.*

以下是我的build.sbt文件:

代码语言:javascript
复制
    name := "Sessionization"
    version := "0.1"
    scalaVersion := "2.11.8"

    assemblyShadeRules in assembly := Seq(ShadeRule.rename("com.fasterxml.jackson.core.**" -> "shaded.jackson.core.@1").inAll
      //.inLibrary("com.fasterxml.jackson.core" % "jackson-databind" % "2.9.2")
      //.inLibrary("com.fasterxml.jackson.core" % "jackson-core" % "2.9.2")
      //.inLibrary("com.fasterxml.jackson.core" % "jackson-annotations" % "2.9.0")
      //.inProject
)

    // Have to use "provided" because of some deduplicate error in merging many same-name class files.
    libraryDependencies ++= Seq("com.maxmind.geoip2" % "geoip2" % "2.10.0", //"org.apache.spark" %% "spark-core" % "2.2.0" % "provided",
  "org.apache.spark" %% "spark-sql" % "2.2.0" % "provided"
  //"org.apache.spark" %% "spark-core" % "2.2.0" excludeAll( ExclusionRule(organization="com.fasterxml.jackson.core")),
  //"org.apache.spark" %% "spark-sql" % "2.2.0" excludeAll( ExclusionRule(organization="com.fasterxml.jackson.core"))
    )

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-22 18:31:22

老实说,我从来没有使用过装配着色规则,但你有没有尝试过这两种方法:

取消注释您的排除规则尝试,并将排除规则替换为ExclusionRule(organization = "*", name = "jackson-core")

  • Add a
  1. to the build.sbt底部。大致是这样的:

assemblyMergeStrategy in assembly := { case x if x.contains("decodeArray") => MergeStrategy.deduplicate case PathList("META-INF", xs @ _*) => MergeStrategy.discard case x => MergeStrategy.first }

如果您仍然有问题,那么要做的另一件有用的事情是将conflictManager := ConflictManager.strict添加到您的build.sbt中以识别冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47427604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档