首页 > 解决方案 > module-info 的 sbt-assembly 合并策略

问题描述

我从事基于 Scala + SBT 的项目。

我正在尝试将包含多个子模块的项目打包到一个可运行的 fat-jar 中。我正在使用带有以下build.sbt文件的 sbt-assembly 插件:

... Project initializations...

osName := "win"

lazy val javafxVersion = "14"

libraryDependencies ++= Seq(...Managed dependencies...)

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

assemblyJarName in assembly := s"${name.value}_${version.value}.jar".replace("-SNAPSHOT", "")

我需要上面的合并策略,否则我会遇到成千上万的冲突。但是,当涉及到模块化(contain module-info.class)文件的托管依赖项时,它将选择第一个。这会产生一个问题,因为实际上有 19 个依赖项是模块化的(JavaFX 就是一个例子)。

我尝试创建自己的自定义合并策略,但在 SBT 方面不是专家。我想知道是否有更好的解决方案,还是我必须创建一个自定义的?

我现在搜索了一段时间,找不到解决方案,但是这个 GitHub链接表明 sbt-assembly 没有为此提供现成的解决方案。

标签: javascalasbtsbt-assembly

解决方案


推荐阅读