0

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

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

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

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

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

4

1 回答 1

1

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

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

在使用 uberjar 的“生产”时,您需要手动设置类路径:

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

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

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

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"}
于 2016-09-05T02:55:43.217 回答