是否可以在 sbt 中仅在一个包中遮蔽某些包?
Posted
技术标签:
【中文标题】是否可以在 sbt 中仅在一个包中遮蔽某些包?【英文标题】:Is it possible to shade some package in only one package in sbt? 【发布时间】:2021-04-19 22:25:13 【问题描述】:让我们考虑以下源代码:
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
包下的only 类会被重写(它对com.google.common
的引用)。
【问题讨论】:
那么?有什么问题? 有没有可能达到我指出的效果?inPath
不存在。仅为示例,请仔细阅读。
ShadeRule.rename("org.apache.commons.io.**" -> "shadeio.@1").inLibrary("commons-io" % "commons-io" % "2.4")
【参考方案1】:
可以使用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)
)
【讨论】:
以上是关于是否可以在 sbt 中仅在一个包中遮蔽某些包?的主要内容,如果未能解决你的问题,请参考以下文章