是否可以在 sbt 中仅在一个包中隐藏一些包?
Is it possible to shade some package in only one package in sbt?
让我们考虑以下源代码:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1")
.inAll
)
它重命名 com.google.common
并更改包名称。此外,由于 inAll
它重写了 jar 中 all 类 中的所有导入和其他引用。它工作正常。然而,问题是:
是否可以只重写选定的参考文献?我的意思是我用路径来打包?
让我们这样说:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1")
.inPath("org.apache.spark")
)
我预计 只有 类 在 org.apache.spark
包下将被重写(它对 com.google.common
的引用)。
可以使用inLibrary
方法实现。它的用法是:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1") // it defines what/how to rewrite (belowe we define where to rewrite)
.inLibrary("com.google.guava" % "guava" % "30.1-jre") // it rewrites references and packages names "com.google.common -> my_package.com.google.common")
.inLibrary("org.apache.spark" % "spark-core" % "2.4.7") // it rewrites references (e.g. imports to guava from spark-core code)
)
让我们考虑以下源代码:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1")
.inAll
)
它重命名 com.google.common
并更改包名称。此外,由于 inAll
它重写了 jar 中 all 类 中的所有导入和其他引用。它工作正常。然而,问题是:
是否可以只重写选定的参考文献?我的意思是我用路径来打包?
让我们这样说:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1")
.inPath("org.apache.spark")
)
我预计 只有 类 在 org.apache.spark
包下将被重写(它对 com.google.common
的引用)。
可以使用inLibrary
方法实现。它的用法是:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.google.common.**" -> "my_package.@1") // it defines what/how to rewrite (belowe we define where to rewrite)
.inLibrary("com.google.guava" % "guava" % "30.1-jre") // it rewrites references and packages names "com.google.common -> my_package.com.google.common")
.inLibrary("org.apache.spark" % "spark-core" % "2.4.7") // it rewrites references (e.g. imports to guava from spark-core code)
)