sbt-сборка: переименовать класс из-за конфликтов слияния (тень)

#sbt #sbt-assembly

#sbt #sbt-assembly

Вопрос:

Как я могу указать sbt-assembly сохранять существующие правила слияния / дедупликации, за исключением случаев, когда два .class файла объединяются, переименовать (и выдать предупреждение, чтобы я знал об этом)?

Будет ли это идентично стратегии shade, используемой в Maven?

Ответ №1:

rename Стратегия буквально просто переименовывает файл и не изменяет содержимое, поэтому она не будет работать для файлов .class. Основной вариант использования для переименования — для файлов ЛИЦЕНЗИЙ.

Обновлено в сентябре 2015:

sbt-assembly 0.14.0 добавляет поддержку затенения.

sbt-assembly может скрывать классы из ваших проектов или из зависимостей библиотеки. При поддержке ссылок Jar Jar преобразование байт-кода (через ASM) используется для изменения ссылок на переименованные классы.

 assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inAll
)
  

Комментарии:

1. Спасибо. Поддерживает ли sbt-assembly что-либо подобное shade?

2. Значит, в sbt нет решения проблемы затенения? Действительно ли я должен перейти на maven? Это просто…

3. На Github возникла проблема с петицией по поводу этой функции — github.com/sbt/sbt-assembly/issues/156

4. И теперь поддержка shade была объединена в sbt # master !