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

我们的项目主要由两部分组成

  • Build.scala根项目所在的地方
  • BuildShaded.scala,其中一些外部依赖项使用sbt-assembly进行着色。 阴影化的罐子将通过unmanagedJars罐子设置的根项目下的子项目依赖。
  • 问题是如何在编译根项目之前组装阴影项目。 否则,根项目将无法编译,因为阴影罐中的这些类不可用。


    正如我在评论中所说的,我会采取不同的路线。 如果您将依赖关系视为托管依赖关系,则可以将它们都放在库本身和项目内。

    我们来看一个例子:

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

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

    现在,它的输出如下所示:

    这就是程序包在内部看起来的样子( my_confcom.typesafe.config之前最初是com.typesafe.config ):

    类型安全的配置代码

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

    你的代码

    链接地址: http://www.djcxy.com/p/93885.html

    上一篇: how to shade before compile with SBT?

    下一篇: React Native Maps library