繁体   English   中英

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

[英]sbt plugin: add an unmanaged jar file

我正在尝试创建一个相对简单的 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 插件添加外部工件?

解决这个问题的正确方法是发布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使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM