Ошибка затенения sbt-сборки с бесформенным в 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 толстой банки, произведенной в Mac, ошибки не возникаетspark-submit
1 ответ
Я не уверен, почему в Ubuntu затенение работает не так, как в MacO, но я вижу одну проблему: вы затеняете только часть бесформенного. Я не думаю, что это хорошая идея и может вызвать проблемы, потому что вы будете смешивать разные версии бесформенных. Мое предложение состоит в том, чтобы попробовать затенение бесформенного полностью для PureConfig. Просто добавь
assemblyShadeRules in assembly := Seq(ShadeRule.rename("shapeless.**" -> "new_shapeless.@1").inAll)
в ваш файл SBT. Это решение было протестировано мной на Ubuntu 16.04 с PureConfig 7.2 и Spark 2.1.0. См. Раздел часто задаваемых вопросов PureConfig об этой проблеме.