【问题标题】:SBT Assembly remove classes from another JARSBT 程序集从另一个 JAR 中删除类
【发布时间】:2021-10-08 01:35:21
【问题描述】:

这是我的 repo 的包结构:

src
|-- main
    |-- scala
        |-- me.sparker0i.spark
            |-- runner
                |-- Runner.scala
            |-- utils
                |-- Constants.scala
                |-- DatabaseUtils.scala
            |-- service
                |-- Service.scala
                |-- Transform.scala [extends Service]
                |-- Fetch.scala [extends Service]
                |-- <32 more>
            |-- Test.scala

我想将此应用程序拆分为两个,这样一个应用程序仍然是核心,而另一个使用核心 jar 作为libraryDependencies

核心回购结构:

src
|-- main
    |-- scala
        |-- me.sparker0i.spark
            |-- runner
                |-- Runner.scala
            |-- utils
                |-- Constants.scala
                |-- DatabaseUtils.scala
            |-- service
                |-- Service.scala
            |-- Test.scala

独立回购:

src
|-- main
    |-- scala
        |-- me.sparker0i.spark
            |-- service
                |-- Transform.scala [extends Service from Core Repo JAR]
                |-- Fetch.scala [extends Service from Core Repo JAR]
                |-- <32 more>

现在在独立存储库中,我在 libraryDependencies 中引用了核心存储库 JAR。 我需要 Core JAR 来在我们的 Jenkins CICD 中运行独立存储库的测试用例,但在我需要打包独立存储库时不需要。

当我sbt assembly时,我如何确保我没有在独立JAR中获取核心JAR的内容?原因是我将在 Core JAR 中运行 Main 类,但也将提供 Independent JAR 作为类路径。

有没有什么方法可以使用 sbt 实现上述要求?

【问题讨论】:

    标签: scala sbt sbt-assembly


    【解决方案1】:

    您可以使用范围Provided 声明依赖项。这完全适用于这个用例,即在运行时以某种方式提供依赖项,但不是包的一部分。

    groupId % core % version % Provided
    

    【讨论】:

    • 如果我的理解是正确的,那么核心 JAR 中的任何其他依赖项都不会在这个独立 JAR 被 sbt assemblyed 时继承,对吗?
    • 尽管我不熟悉 sbt-assembly,但这是我所期望的事件。您可能可以测试并确认。
    猜你喜欢
    • 2013-12-06
    • 2011-12-10
    • 2014-08-13
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多