sbt插件:添加一个非托管jar文件

vwoqyblh  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(371)

我试图创建一个相对简单的sbt插件来 Package 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文档,为了包含一个非托管依赖关系,我所要做的就是:
创建 lib 文件夹;
把神器放在那里;
但是,当我执行 sbt compile publishLocal ,发布的插件缺少该外部工件。
到目前为止,我试着:
exportJars := true 旗帜
添加 Compile / unmanagedJars += file(lib/grpc-swagger.jar") (路径也有变化)
手工摆弄 libraryDependecies 使用 from file("lib/grpc-swagger.jar") 说明符
但到目前为止似乎都没有奏效。
那么我应该如何向sbt插件添加外部工件呢?

pprl5pva

pprl5pva1#

解决这个问题的正确方法是发布 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`)

   ...

为生成的pom文件 root project现在应该指定对grpcswagger的依赖关系,在grpcswagger项目中运行publish任务将把jar和pom文件一起发布。
这应该足以让事情顺利,但老实说,这仍然是一个黑客。正确的解决方案是修复grpcswagger的构建系统,这样您就可以从那里发布一个工件,然后通过 libraryDependencies .

相关问题