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

时间:2016-11-03 08:44:24

标签: scala sbt sbt-assembly

Our project主要由两部分组成

问题是如何在编译根项目之前组装着色项目。否则,根项目将无法编译,因为着色jar中的那些类不可用。

1 个答案:

答案 0 :(得分:7)

正如我在评论中所说,我会采取不同的方式。如果您将依赖项视为托管依赖项,则可以在库本身和项目内部对它们进行着色。

让我们看一个例子:

假设我有一个依赖于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):

Typesafe Config code

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

Your Code