lein uberjar没有将resource下的jar文件打包到最终的jar中

lein uberjar doesn't pack the jar file under resource into the final jar

我在 profile.clj 中定义了 :resource-paths 以包含一些特殊的 jar (vertica jdbc) 文件。然后我 运行 lein uberjar:试图将该 jar 文件打包到独立的 jar 文件中,但是在我 运行 它并解压缩之后,我找不到那个 vertica jdbc 文件.

Leiningen 可以创建 jar 文件,但它从中获取它们的唯一位置是您的 Maven 存储库(在您机器上的 .m2 目录下)。一旦你的 special jar 在 maven 中,你需要在你的 project.clj 文件中将其作为依赖项引用。

如果您的 jar 文件在 clojars 中,这将非常容易 - 只需放入一个依赖项 - lein 会将它提取到您的 maven 存储库中。另一方面,如果它是您自己的源代码,您首先需要从该源代码项目的目录中 lein install

不过我猜你的文件只是一个 jar 文件,它不是 clojars 中的工件。在这种情况下,您可以使用此 maven 命令将其安装到您的 maven 存储库中(此处假设 my-deps.jar 是您的文件):

mvn install:install-file -Dfile=./my-deps.jar -DgroupId=my-deps -DartifactId=my-deps -Dversion=1.0.0 -Dpackaging=jar

然后您可以在 uberjar 项目 中将其作为依赖项引用,然后 lein uberjar

编辑 - 如果您不想使用原始 Maven 命令,请考虑使用这个 leiningen 库,它为您抽象它们:https://github.com/kumarshantanu/lein-localrepo.

另一种方法是添加到 project.clj:

:repositories {"local" "file:lib"}

在您的项目中创建一个 lib 目录并在其中添加 jar。

project.clj中的:dependencies标签中添加lib引用。

此 lib 目录与 .m2/repository 具有相同的结构,但在您的项目中并且在您的项目本地