簡體   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