我有一个项目,我必须为一些专有硬件包含一个胖罐 - 不要问,我知道它最好用于中央或其他回购的jar,但事实并非如此。 :(我必须将它放在lib目录中,因此sbt会将其视为非托管依赖项。
但是jar包括slf4j,它的旧版本,以及Play!运行它会抛出一个错误,抱怨静态函数丢失(在较新版本的slf4j中添加了。
这是我尝试过的。
有没有人知道在基于sbt的scala或play项目中,在Uber jar中排除某些非托管依赖项的方法?
答案 0 :(得分:0)
您可以shade管理的slf4j库并使其看起来没有依赖性冲突。为此,您可以使用sbt-assembly着色能力。
例如,如果你正在使用slf4j-api
,它将如下所示:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("org.slf4j.slf4j-api.**" -> "my_slf4j.@1")
.inLibrary("org.slf4j" % "slf4j-api" % "1.7.21")
.inProject
)
这会导致使用此特定版本的slf4j的任何内容使用my_slf4j
前缀而不是org.slf4j
更改其包名称。