Our project 主要由两部分组成

  • Build.scala 根项目所在的位置
  • BuildShaded.scala 其中一些外部依赖项用 sbt-assembly 着色。阴影 jar 将通过 unmanagedJars 设置由根项目下的子项目依赖。

  • 问题是如何在编译根项目之前组装着色项目。否则,根项目将无法编译,因为阴影 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):
    scala - 如何在使用 SBT 编译之前进行着色?-LMLPHP
    这是您的代码将引用的包:
    scala - 如何在使用 SBT 编译之前进行着色?-LMLPHP

    关于scala - 如何在使用 SBT 编译之前进行着色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40397065/

    10-16 02:56