如何在使用 SBT 编译之前进行着色?

how to shade before compile with SBT?

Our project主要由两部分组成

问题是在编译根项目之前如何组装阴影项目。否则,根项目将无法编译,因为阴影 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。”

请注意,我们同时使用了 inLibraryinProject。前者的意思是“在 com.typesafe.config 中更改包名称和对它们的引用”,inProject 的意思是“在我的代码中更改对 com.typesafe.config 的所有引用”。

现在,输出如下所示:

这是包内部现在的样子(my_conf 最初是 com.typesafe.config 在着色之前):

这是您的代码将引用的包: