2016-06-11 9 views
1

У меня есть проект, для которого я должен включить жир-банку для какого-то проприетарного оборудования - не спрашивайте, я знаю, что он лучше всего подходит для банки на центральном или каком-то другом репо, но это не так. :(Я должен поместить его в каталог lib, поэтому sbt будет обрабатывать его как неуправляемую зависимость.исключая из Uber (жирного) банка в sbt для Play! в Scala

, но в банке есть slf4j, старая версия, а при запуске Play! Это вызывает ошибку, жалуясь, что статическая функция не хватает (который был добавлен в более новых версиях SLF4J.

Вот что я пытался.

  • Я пытался добавить libraryDependency с помощью силы(). нет кости.
  • I попробовали пару исключенийВсе образцы, которые я нашел здесь. Нет костей.
  • Из отчаянного отчаяния я расстегнул банку, удалил slf4j и снова создал банку. Это работает !, но серьезно это не мой первый выбор для поддержания проекта.

Кто-нибудь знает, как исключить что-то внутри банки Uber, которая является неуправляемой зависимостью в проекте scala или play на основе sbt?

ответ

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

Управляемая версия компилируется с помощью uber jar, не так ли? Если это так, функция затенения будет затенять внутреннюю библиотеку, используемую внутри банки, которая, по моему мнению, необходима, если вы хотите –