Search code examples
clojureleiningenluminus

How to create an uberjar correctly with "lein uberjar"?


if I use lein run the project is no problem.

But when I use jave -jar blog.jar after lein uberjar It happen exceptions.

16-Jul-20 11:28:05 DESKTOP-C3SC9AR INFO [slf4j-timbre.adapter] - >> starting..  *db*
Exception in thread "main" java.lang.RuntimeException: could not start [*db*] due to

        .....

Caused by: java.lang.Exception: :jdbc-url, :datasource, or :datasource-

AND my project.clj file

(defproject blog "0.1.0-SNAPSHOT"

  :description "FIXME: write description"
  :url "http://example.com/FIXME"

  :dependencies ....

  :min-lein-version "2.0.0"
  :uberjar-name "blog.jar"
  :jvm-opts ["-server"]

  :main blog.core
  :migratus {:store :database}

  :plugins [[lein-environ "1.0.1"]
            [migratus-lein "0.2.0"]]

  :profiles
  {:uberjar {:omit-source true
             :env {:production true}
             :aot :all
             :source-paths ["env/prod/clj"]}
   :dev           [:project/dev :profiles/dev]
   :test          [:project/test :profiles/test]
   :project/dev  ...
   :project/test ...
   :profiles/dev  {:env {:database-url "jdbc:postgresql://localhost/blog?user=postgres&password=root"}}
   :profiles/test {}})

Maybe it can't find the key of "database-url"?


Solution

  • Data provided via environment settings in project.clj are not provided when you use java directly. It's your responsibility to make sure the environment settings visible to the app provide any credentials or connection info needed.

    It could look something like:

    DATABASE_URL="jdbc...." java -jar my-project-standalone.jar