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
但 none 到目前为止似乎有效。
那么我应该如何向 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
.
使用它
我正在尝试创建一个相对简单的 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
但 none 到目前为止似乎有效。
那么我应该如何向 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
.