2016-06-11 51 views
1

我有一個項目,我必須爲一些專有硬件包括一個fat-jar - 不要問,我知道它最適合在Central或其他某個回購站上使用,但事實並非如此。 :(我必須把它放在lib目錄下,所以sbt會把它當作一個非託管的依賴項。不包括優步(胖)罐在sbt播放!在斯卡拉

但是jar包含slf4j,它的一箇舊版本,當Play!運行時拋出一個錯誤,抱怨靜態功能缺失(這是在SLF4J的較新版本中添加的。

這是我都試過了。

  • 我試圖添加使用libraryDependency力()。沒有骰子。
  • 我已經嘗試了一些我在這裏找到的不包括所有樣本。沒有骰子。
  • 出於絕望的絕望,我解壓縮了jar,刪除了slf4j,並再次創建了jar。它工作!,但嚴重的是,這不是我維護該項目的首選。

有沒有人知道一種方法來排除Uber jar中的某些東西,這是一個基於sbt的scala或play項目中的非託管依賴項?

回答

0

你可以shade你的託管slf4j庫,並使其看起來沒有依賴衝突。要做到這一點,你可以使用着色能力sbt-assembly

例如,如果你使用slf4j-api,它應該是這樣的:

assemblyShadeRules in assembly ++= Seq(
    ShadeRule.rename("org.slf4j.slf4j-api.**" -> "[email protected]") 
    .inLibrary("org.slf4j" % "slf4j-api" % "1.7.21") 
    .inProject 
) 

這將使用SLF4J的這個特定版本來改變它,因爲任何事情都有一個my_slf4j前綴,而不是org.slf4j包名。

+0

感謝您的回覆,但正如我所提到的,我需要託管版本(它也可以以任何方式排除在依賴項中),因爲它是較新的版本。我需要以某種方式排除非託管庫中的版本。 – Reza

+0

託管版本是用超級jar編譯的,不是嗎?如果是這樣,陰影功能將陰影在jar內部使用的內部庫,我認爲這是你想要的wjat –