使用sbt-assembly 0.14.6:
addSbtPlugin("com.eed3si9n" %% "sbt-assembly" % "0.14.6")
使用sbt-assembly为Spark应用程序创建一个超级jar,包括一些要着色的依赖项:
libraryDependencies += "org.json4s" % "json4s-native_2.11" % "3.5.3",
libraryDependencies += "com.typesafe" % "config" % "1.3.3",
这实际上是第二次尝试,我真的想
libraryDependencies += "org.json4s" %% "json4s-native" % "3.5.3",
libraryDependencies += "com.typesafe" % "config" % "1.3.3",
但是想到在moduleID中使用%%
时,阴影可能会导致我的麻烦。什么有效,什么无效:
sbt-assembly可以像这样遮蔽几个库:
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.json4s.**" -> "shaded_json4s.@1").inAll,
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.3")
.inProject
),
示例着色类:
my_conf/parser/ConfigNode.class
shaded_json4s/FieldSerializer.class
两个库都有阴影。我想更具体,避免在所有:
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.json4s.**" -> "shaded_json4s.@1")
.inLibrary("org.json4s" % "json4s-native_2.11" % "3.5.3")
.inProject,
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.3")
.inProject
),
但这并没有遮蔽json4s类:
my_conf/parser/ConfigNode.class
org/json4s/FieldSerializer.class
但我开始时,我更喜欢的是:
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("org.json4s.**" -> "shaded_json4s.@1")
.inLibrary("org.json4s" %% "json4s-native" % "3.5.3")
.inProject,
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.3")
.inProject
),
但这不会影响json4s类:
my_conf/parser/ConfigNode.class
org/json4s/FieldSerializer.class
使用inLibrary时,是否需要以不同的方式对着色调工作json4s?