ошибка затенения sbt-assembly с бесформенным в ubuntu

У меня странная проблема с sbt-assembly, если кто-нибудь может помочь

При попытке создать толстую банку для развертывания в Spark с затенением, примененным к библиотекам shapeless, я вижу, что некоторые классы не переименовываются при запуске на компьютере с Ubuntu, в то время как все переименовывается нормально, когда sbt assembly запускается на Mac.

Вот конфиг затенения

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("shapeless.**" -> "shadedshapeless.@1")
    .inLibrary("com.chuusai" % "shapeless_2.11" % "2.3.2")
    .inLibrary("com.github.pureconfig" % "pureconfig_2.11" % "0.7.0")
    .inProject)

При запуске на Mac эти классы переименовываются в шаблон shapeless/Generic*.

Renamed shapeless/Generic$.class -> shadedshapeless/Generic$.class
Renamed shapeless/Generic.class -> shadedshapeless/Generic.class
Renamed shapeless/Generic1$.class -> shadedshapeless/Generic1$.class
Renamed shapeless/Generic1$class.class -> shadedshapeless/Generic1$class.class
Renamed shapeless/Generic1.class -> shadedshapeless/Generic1.class
Renamed shapeless/Generic10$class.class -> shadedshapeless/Generic10$class.class
Renamed shapeless/Generic10.class -> shadedshapeless/Generic10.class
Renamed shapeless/Generic1Macros$$anonfun$1.class -> shadedshapeless/Generic1Macros$$anonfun$1.class
Renamed shapeless/Generic1Macros$$anonfun$2.class -> shadedshapeless/Generic1Macros$$anonfun$2.class
Renamed shapeless/Generic1Macros.class -> shadedshapeless/Generic1Macros.class
Renamed shapeless/GenericMacros$$anonfun$23.class -> shadedshapeless/GenericMacros$$anonfun$23.class
Renamed shapeless/GenericMacros.class -> shadedshapeless/GenericMacros.class

но при запуске в Ubuntu для шаблона shapless/Generic* переименовываются только эти вещи

Renamed shapeless/GenericMacros$$anonfun$23.class -> shadedshapeless/GenericMacros$$anonfun$23.class
Renamed shapeless/Generic1Macros$$anonfun$1.class -> shadedshapeless/Generic1Macros$$anonfun$1.class
Renamed shapeless/Generic1$.class -> shadedshapeless/Generic1$.class
Renamed shapeless/Generic1.class -> shadedshapeless/Generic1.class

Я выбрал шаблон shapeless/Generic*, потому что, когда я предоставляю толстую банку (созданную в Ubuntu) spark-submit, я сразу получаю сообщение об ошибке (вероятно, исходящее от pureconfig)

Exception in thread "main" java.lang.NoClassDefFoundError: shadedshapeless/Generic

Ошибка не возникает, когда толстая банка, созданная на Mac, загружается в spark-submit


person kaychaks    schedule 26.04.2017    source источник
comment
У меня такая же проблема с подсистемой Windows и Linux. Некоторые классы внутри shapeless не переименованы. Вы нашли ответ?   -  person Minh Thai    schedule 11.12.2018


Ответы (1)


Я не уверен, почему в Ubuntu затенение работает иначе, чем в MacO, но я вижу одну проблему: вы затеняете только часть бесформенного. Я не думаю, что это хорошая идея и может создать проблемы, потому что вы будете смешивать разные версии shapeless. Мое предложение — попробовать полностью затенить бесформенность для PureConfig. Просто добавь

assemblyShadeRules in assembly := Seq(ShadeRule.rename("shapeless.**" -> "new_shapeless.@1").inAll)

в ваш файл sbt. Это решение было протестировано мной на Ubuntu 16.04 с PureConfig 7.2 и Spark 2.1.0. См. раздел часто задаваемых вопросов . PureConfig об этой проблеме.

person mariop    schedule 21.06.2017