【问题标题】:scala.MatchError: org\apache\commons\io\IOCase.class (of class java.lang.String) in sbt+assemblyscala.MatchError: sbt+assembly 中的 org\apache\commons\io\IOCase.class (of class java.lang.String)
【发布时间】:2017-07-27 01:25:52
【问题描述】:

当我使用 sbt 程序集时,它会打印如下错误:

[error] (*:assembly) scala.MatchError: org\apache\commons\io\IOCase.class (of class java.lang.String)

这些是我的配置:

1、assembly.sbt:

import AssemblyKeys._
assemblySettings
mergeStrategy in assembly := {
    case PathList("org", "springframework", xs@_*) => MergeStrategy.last
}

2、bulid.sbt

import AssemblyKeys._
lazy val root = (project in file(".")).
  settings(
    name := "DmpRealtimeFlow",
    version := "1.0",
    scalaVersion := "2.11.8",
    libraryDependencies += "com.jd.ads.index" % "ad_index_dmp_common" % "0.0.4-SNAPSHOT",
    libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0" % "provided",
    libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.0" % "provided",
    libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.0" % "provided",
    libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.8",
    libraryDependencies += "org.springframework" % "spring-beans" % "3.1.0.RELEASE",
    libraryDependencies += "org.springframework" % "spring-context" % "3.1.0.RELEASE",
    libraryDependencies += "org.springframework" % "spring-core" % "3.1.0.RELEASE",
    libraryDependencies += "org.springframework" % "spring-orm" % "3.1.0.RELEASE",
    libraryDependencies += "org.mybatis" % "mybatis" % "3.2.1" % "compile",
    libraryDependencies += "org.mybatis" % "mybatis-spring" % "1.2.2",
    libraryDependencies += "c3p0" % "c3p0" % "0.9.1.2"
  )

3、项目工具:

sbt:0.13.5
assembly:0.11.2
java:1.7
scala:2.11.8

有什么帮助吗?

【问题讨论】:

    标签: scala sbt sbt-assembly


    【解决方案1】:

    问题可能在于组装块中mergeStrategy中缺少默认情况:

        case x =>
          val oldStrategy = (assemblyMergeStrategy in assembly).value
          oldStrategy(x)
    

    此外,mergeStrategy 已被弃用,而应使用 assemblyMergeStrategy。

    基本上是

    {
        case PathList("org", "springframework", xs@_*) => MergeStrategy.last
    }
    

    是一个偏函数 String => MergeStrategy 只为一种类型的输入定义,即为带有包前缀“org\springframework”的类。但是,它适用于项目中的所有类文件,并且第一个与上述前缀不匹配的类文件(org\apache\commons\io\IOCase.class)会导致MatchError。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2011-07-07
      • 2021-05-20
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多