为什么不使用inLibrary sbt-assembly树荫json4s?

时间:2018-04-05 15:04:24

标签: sbt sbt-assembly

使用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?

0 个答案:

没有答案