leiningen uberjar - 在运行时添加外部 jar

leiningen uberjar - add external jar at runtime

我正在尝试了解如何在制作 leiningen uberjar 时将目录和外部 jar 添加到类路径。

原因是我需要分发一个jar,但是由于许可限制,一些依赖项(例如jdbc驱动程序)无法编译到uberjar中。

我还想提供某些外部资源,例如 jar 外部的日志记录和配置属性。

通常在 java 或 spring 启动时,我会使用适当的命令行选项来更改类路径。但是 -cp 没有找到 jar 等

有没有办法做到这一点或合适的插件? 提前致谢

您可以将 jar 添加为 :dev 配置文件中的资源。然后将其添加到类路径中。 dev 配置文件用于本地开发,并没有打包到 uberjar 中。

:profiles {
         :uberjar {:aot :all}
         :dev {:resource-paths ["no-redist/commercial-jdbc-driver.jar"]}}

在 'production' 使用 uberjar 时,您需要手动设置类路径:

java -cp no-redist/commercial-jdbc-driver.jar;your-app-uber-jar.jar main.namespace

Afaik 在使用 -jar 标志时,它使用 jar 文件中的依赖项,无论在那里链接和引用什么。结合使用 -cp 和 -jar 可能不起作用。

另一种方法是引用jar清单中不可分发的jar文件(META-INF/MANIFEST.MF):

Class-Path: no-redist/commercial-jdbc-driver.jar

java -jar your-app-uber-jar.jar 会在本地目录的文件夹 no-redist/commercial-jdbc-driver.jar 中查找 jar。在 leinigen 中添加如下内容:

:manifest {"Class-Path" "no-redist/commercial-jdbc-driver.jar"}