我正在尝试查看在制作 leiningen uberjar 时如何将目录和外部 jar 添加到类路径中。
原因是我需要分发一个 jar,但由于许可限制,某些依赖项(例如 jdbc 驱动程序)无法编译到 uberjar 中。
我还想提供某些外部资源,例如 jar 外部的日志记录和配置属性。
通常在 java 或 spring boot 中,我会使用适当的命令行选项来更改类路径。但是 -cp 找不到 jar 等
有没有办法做到这一点或适当的插件?提前致谢
您可以将 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"}