sbt-assembly 的 Slick 3.1.1 重复数据删除错误

Slick 3.1.1 deduplication errors with sbt-assembly

我在 Scala 项目中使用 Slick 3.1.1。我的 build.sbt libraryDependencies 包含这个:

"com.typesafe.slick"  %% "slick"           % "3.1.1",
"com.typesafe.slick"  %% "slick-hikaricp"  % "3.1.1",    
"com.zaxxer"          % "HikariCP"         % "2.4.3",
"mysql"               % "mysql-connector-java" % "5.1.38",

一切正常。但是,当我尝试使用 sbt-assembly 进行部署时,出现如下错误:

[error] deduplicate: different file contents found in the following:
[error] /home/thunderkid/.ivy2/cache/com.zaxxer/HikariCP-java6/bundles/HikariCP-java6-2.3.7.jar:com/zaxxer/hikari/pool/HikariPool.class
[error] /home/thunderkid/.ivy2/cache/com.zaxxer/HikariCP/bundles/HikariCP-2.4.3.jar:com/zaxxer/hikari/pool/HikariPool.class

我该如何解决这些问题?

之前我使用的是 Slick 3.0,它不需要 slick-hikaricp,而且运行良好。我尝试删除 .ivy2/cache/com.zaxxer/HikariCP-java6,但这不起作用 - 它只是重新创建。我的 mergeStrategy

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
    {
        case PathList(ps @ _*) if ps.last endsWith "ArgumentsProcessor.class" => MergeStrategy.first
        case PathList(ps @ _*) if ps.last endsWith "MatchersBinder.class" => MergeStrategy.first
        case "application.conf" => MergeStrategy.concat
        case "unwanted.txt"     => MergeStrategy.discard
        case x => old(x)
    }
}

按照@brettw 在他上面的评论中的建议,我通过将 exclude 命令添加到 build.sbt 中来实现它,如下所示:

"com.typesafe.slick"  %% "slick-hikaricp"  % "3.1.1"   exclude("com.zaxxer", "HikariCP-java6"),