如何在使用 SBT 编译之前进行着色?
how to shade before compile with SBT?
Our project主要由两部分组成
- Build.scala根项目所在的地方
- BuildShaded.scala where some external dependencies are shaded with sbt-assembly。通过
unmanagedJars
设置,根项目下的子项目将依赖阴影 jar。
问题是在编译根项目之前如何组装阴影项目。否则,根项目将无法编译,因为阴影 jar 中的 类 不可用。
正如我在评论中所说,我会走另一条路。如果您将依赖项作为 托管依赖项,您可以在库本身和项目中隐藏它们。
让我们看一个例子:
假设我有一个依赖 com.typesafe.config
的项目。我可以在它自己的库中对其进行着色,这意味着在 com.typesafe.config
的代码中,以及在使用库中。
你这样定义它:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.0")
.inProject
)
这基本上意味着“拿走任何带有 com.typesafe.config
的包裹并将其遮蔽到 my_conf
。”
请注意,我们同时使用了 inLibrary
和 inProject
。前者的意思是“在 com.typesafe.config
中更改包名称和对它们的引用”,inProject
的意思是“在我的代码中更改对 com.typesafe.config
的所有引用”。
现在,输出如下所示:
这是包内部现在的样子(my_conf
最初是 com.typesafe.config
在着色之前):
这是您的代码将引用的包:
Our project主要由两部分组成
- Build.scala根项目所在的地方
- BuildShaded.scala where some external dependencies are shaded with sbt-assembly。通过
unmanagedJars
设置,根项目下的子项目将依赖阴影 jar。
问题是在编译根项目之前如何组装阴影项目。否则,根项目将无法编译,因为阴影 jar 中的 类 不可用。
正如我在评论中所说,我会走另一条路。如果您将依赖项作为 托管依赖项,您可以在库本身和项目中隐藏它们。
让我们看一个例子:
假设我有一个依赖 com.typesafe.config
的项目。我可以在它自己的库中对其进行着色,这意味着在 com.typesafe.config
的代码中,以及在使用库中。
你这样定义它:
assemblyShadeRules in assembly ++= Seq(
ShadeRule.rename("com.typesafe.config.**" -> "my_conf.@1")
.inLibrary("com.typesafe" % "config" % "1.3.0")
.inProject
)
这基本上意味着“拿走任何带有 com.typesafe.config
的包裹并将其遮蔽到 my_conf
。”
请注意,我们同时使用了 inLibrary
和 inProject
。前者的意思是“在 com.typesafe.config
中更改包名称和对它们的引用”,inProject
的意思是“在我的代码中更改对 com.typesafe.config
的所有引用”。
现在,输出如下所示:
这是包内部现在的样子(my_conf
最初是 com.typesafe.config
在着色之前):
这是您的代码将引用的包: