【问题标题】:sbt plugin: add an unmanaged jar filesbt 插件:添加一个非托管的 jar 文件
【发布时间】:2021-07-11 13:06:02
【问题描述】:

我正在尝试创建一个相对简单的 sbt 插件来包装 grpc-swagger 工件。 因此,我创建了一个具有以下结构的项目:

projectDir/
  build.sbt
  lib/grpc-swagger.jar <- the artifact I've downloaded
  src/...

build.sbt 如下所示:

ThisBuild / version := "0.0.1-SNAPSHOT"
ThisBuild / organization := "org.testPlugin"
ThisBuild / organizationName := "testPlugin"

lazy val root = (project in file("."))
  .enable(SbtPlugin)
  .settings(name := "grpc-swagger-test-plugin")

根据sbt docs,这就是我要包含非托管依赖项所要做的一切,即:

  • 创建一个lib 文件夹;
  • 将工件存放在那里;

但是,当我执行 sbt compile publishLocal 时,发布的插件缺少该外部工件。

到目前为止,我已经尝试过:

  • 设置exportJars := true标志
  • 添加Compile / unmanagedJars += file(lib/grpc-swagger.jar")(还有路径的变体)
  • 使用from file("lib/grpc-swagger.jar") 说明符手动修改libraryDependecies

但到目前为止似乎没有任何效果。

那么我应该如何将外部工件添加到 sbt 插件?

【问题讨论】:

    标签: scala sbt sbt-plugin


    【解决方案1】:

    解决这个问题的正确方法是发布grpc-swagger 库。如果由于某种原因无法从该库的构建系统中完成,您可以使用 sbt 来完成。只需添加一个简单的子项目,其唯一的工作就是发布该 jar。它应该像这样工作:

    ...
    lazy val `grpc-swagger` = (project in file("."))
      .settings(
        name := "grpc-swagger",
        Compile / packageBin := baseDirectory.value / "lib" / "grpc-swagger.jar",
        // maybe other settings, such as grpc-swagger's libraryDependencies
      )
    
    lazy val root = (project in file("."))
      .enable(SbtPlugin)
      .settings(name := "grpc-swagger-test-plugin")
      .dependsOn(`grpc-swagger`)
    
       ...
    

    root 项目生成的 pom 文件现在应该指定对 grpc-swagger 的依赖,并且在 grpc-swagger 项目中运行发布任务将发布该 jar 以及一个 pom 文件。

    这应该足以让事情正常进行,但老实说,它仍然是一个 hack。正确的解决方案是修复 grpc-swagger 的构建系统,以便您可以从那里发布工件,然后通过 libraryDependencies 使用它。

    【讨论】:

    • 我同意,正确的解决方案确实是修复其构建系统,但在我们的领域中,时间限制将无济于事:) thx 提示!
    猜你喜欢
    • 2016-03-21
    • 2015-05-26
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2015-02-22
    • 2013-09-15
    • 2015-02-07
    • 2013-01-20
    相关资源
    最近更新 更多