jar ファイルの作成に苦労しています。ソース パスを追加しても機能しません。走った
lein with-profiles prod uberjar
これが私のproject.cljです。少し短くしました。ほとんどの場合、luminusテンプレートが含まれています。
(defproject codapay "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.7.0"]
[selmer "0.9.0"]
[org.immutant/web "2.0.2"]
[clj-http "2.0.0"]
[cheshire "5.5.0"]
........
[environ "1.0.0"]
[com.stuartsierra/component "0.2.3"]]
:min-lein-version "2.0.0"
:uberjar-name "codapay.jar"
:jvm-opts ["-server"]
:target-path "target/%s/"
:plugins [[lein-environ "1.0.0"]]
:profiles
{:prod {;;:omit-source true
:env {:production true}
:aot :all
:source-paths ["dev"]
:uberjar-name "coda.jar"
:main codapay.core}})
そしてこれが私のメインです
(ns codapay.core
(:require [codapay.handler :refer [app init destroy]]
[immutant.web :as immutant]
[clojure.tools.nrepl.server :as nrepl]
[taoensso.timbre :as timbre]
[environ.core :refer [env]]
[codapay.entry :refer [start-app]])
(:gen-class))
(defn -main [& args]
(start-app args))
jarファイルを実行します
java -jar coda.jar
この例外で死ぬ
Exception in thread "main" java.lang.ExceptionInInitializerError
at clojure.lang.Namespace.<init>(Namespace.java:34)
at clojure.lang.Namespace.findOrCreate(Namespace.java:176)
at clojure.lang.Var.internPrivate(Var.java:151)
at codapay.core.<clinit>(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: clout/core/CompiledRoute, compiling:(user.clj:1:1)
clout/core/CompiledRoute が見つからないというエラーが表示されましたが、jar ファイルを抽出するとそこにありました。コンパイルには、uberjar を実行したときに余分なソースパスが 2 回コンパイルされるという奇妙なこともあります。
しかし、プロファイル prod のソース パスを消去すると、正常に動作します。
で実行してみました
lein with-profiles prod run
同じエラーを受け取りましたが、aot または source-paths のいずれかが削除されていれば、正常に実行されます
実際のプロジェクトがどのように見えるか興味がある場合は、ここにリンクがあります