leiningen uberjar - добавить внешний jar во время выполнения
Я пытаюсь увидеть, как я могу добавить каталог и внешний jar -файл в classpath при создании leiningen uberjar.
Причина в том, что мне нужно распространять jar, но некоторые зависимости (например, драйвер jdbc) не могут быть скомпилированы в uberjar из-за лицензионных ограничений.
Я также хотел бы предоставить определенные внешние ресурсы, такие как свойства для ведения журнала и конфигурации, внешние по отношению к банке.
Обычно при загрузке Java или Spring я бы использовал соответствующую опцию командной строки, чтобы изменить путь к классу. Однако -cp не находит банку и т.д.
Есть ли способ сделать это или соответствующий плагин? заранее спасибо
1 ответ
Вы можете добавить jar как ресурс в профиле:dev. Затем он добавляется в путь к классам. Профиль dev предназначен для локального развития и не упакован в uberjar.
:profiles {
:uberjar {:aot :all}
:dev {:resource-paths ["no-redist/commercial-jdbc-driver.jar"]}}
Во время "производства" с Uberjar вам нужно установить classpath, а затем вручную:
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 будет искать jar в папке no-redist/commercial-jdbc-driver.jar в локальном каталоге. Добавьте это в leinigen как:
:manifest {"Class-Path" "no-redist/commercial-jdbc-driver.jar"}