2015-01-25 5 views
2

enter code here Есть ли способ отключить редупликацию в SBT'sassembly плагин?SBT Разрешить дубликаты во время сборки

Я очищаю sbt assembly, создавая старомодный способ, используя sbt dependency-graph для удаления файлов jar, которые имеют разные версии одного и того же файла.

  • , если я просто использовать последнюю для стратегии, в результате банки файл failst с дублирующей записью при запуске makeJar.
  • Если я использую , то отбросьте для стратегии, полученный файл jar тривиален, и в нем ничего нет.

Однако, в моем случае, это не огромная проблема: Я хотел бы просто не делать редупликацию целиком, а затем в перспективы время, если у меня есть проблемы, очистить конфликты зависимостей. Обычно такие инструменты, как maven, работают, и я бы хотел использовать SBT для сборки банок, похожих на тучные банки, которые создаются этими инструментами.

+0

Примечание: Я успешно нашел способ решить эту проблему, используя '' 'mergeStrategy в сборке: = {MergeStrategy.discard ...' '' in by build.sbt file. не уверен, что это хорошее решение или нет. – jayunit100

ответ

0

Я смог придумать разумный стратегия слияния, похоже, что это взято из https://github.com/moser/foxtrot_mike_client/blob/master/build.sbt.

mergeStrategy in assembly := { 
    case n if n.startsWith("META-INF/eclipse.inf") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/ECLIPSEF.RSA") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/ECLIPSE_.RSA") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/ECLIPSEF.SF") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/ECLIPSE_.SF") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/MANIFEST.MF") => MergeStrategy.discard 
    case n if n.startsWith("META-INF/NOTICE.txt") => MergeStrategy.discard 
     case n if n.startsWith("META-INF/NOTICE") => MergeStrategy.discard 
     case n if n.startsWith("META-INF/LICENSE.txt") =>  
MergeStrategy.discard 
     case n if n.startsWith("META-INF/LICENSE") => MergeStrategy.discard 
     case n if n.startsWith("rootdoc.txt") => MergeStrategy.discard 
     case n if n.startsWith("readme.html") => MergeStrategy.discard 
     case n if n.startsWith("readme.txt") => MergeStrategy.discard 
     case n if n.startsWith("library.properties") => MergeStrategy.discard 
     case n if n.startsWith("license.html") => MergeStrategy.discard 
     case n if n.startsWith("about.html") => MergeStrategy.discard 
     case _ => MergeStrategy.deduplicate 
    } 

Ответ на первоначальный вопрос, просто, что вы должны определить MergeStrategy при использовании сборки SBT, и существует множество шаблонов (как этот), который вы можете взять и вставить в сборки .sbt файл.

Смежные вопросы