gpt4 book ai didi

scala - 验证 sbt-Assembly IntelliJ 中的着色

转载 作者:行者123 更新时间:2023-12-02 00:55:28 24 4
gpt4 key购买 nike

我正在尝试将 GeoIP2 v2.10.0 Java API ( https://github.com/maxmind/GeoIP2-java ) 与 Apache Spark v2.2.0、Scala 2.11.8 一起使用。问题是,Apache Spark 的 pom 文件中有 jackson-databind 工件 v2.6.5,而 GeoIP2 需要最低版本的 jackson-databind 2.9.2。因此,我尝试使用 sbt-assemble 来遮蔽关联的库。我在 AWS-EMR 上使用 spark-submit 命令,但不断收到以下依赖项错误:

 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 文件:

    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"))
)

提前致谢!

最佳答案

老实说,我从未使用过装配着色规则,但您是否尝试过以下任一方法:

  1. 取消注释您的排除规则尝试,并将排除规则替换为 ExclusionRule(organization = "*", name = "jackson-core")
  2. 将合并策略添加到 build.sbt 的底部。大致如下:

    程序集中的 assemblyMergeStrategy := {
    case x if x.contains("decodeArray") => MergeStrategy.deduplicate
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard
    案例 x => MergeStrategy.first
    }

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

关于scala - 验证 sbt-Assembly IntelliJ 中的着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com