Lein Uberjar работает Repl, а не мое приложение
У меня есть проект Clojure/Ring/Clojurescript, который я развернул с lein uberjar
, затем запустите его с java -jar whatever-0.1-standalone.jar
, До недавнего времени все работало нормально.
Теперь, когда я запускаю его, мне предлагают REPL, вот так;
Clojure 1.7.0
user=>
Думая, что это должно быть что-то в моей кодовой базе, я вернулся (с git) в состояние, которое, как я знаю, раньше работало, но проблема все еще возникает.
Так как проблема не в моей кодовой базе, я попробовал старую версию leiningen - все еще не повезло.
Вот мой проект. Clj:
(defproject acfe "0.5"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[compojure "1.4.0"]
[org.clojure/clojure "1.7.0"]
[org.clojure/data.json "0.2.6"]
[org.clojure/clojurescript "0.0-3308"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
[mysql/mysql-connector-java "5.1.32"]
[org.clojure/java.jdbc "0.4.1"]
[yesql "0.4.2"]
[ring "1.4.0"]
[ring-basic-authentication "1.0.5"]
[bk/ring-gzip "0.1.1"]
[prismatic/dommy "1.1.0"]
[enlive "1.1.6"]
[cljs-ajax "0.3.13"]]
:plugins [[lein-ring "0.9.6"]
[lein-cljsbuild "1.0.6"]]
:ring {:handler acfe.core/app
:port 3001}
:cljsbuild
{:builds
{:app
{:source-paths ["src-cljs"]
:compiler
{:optimizations :simple
:output-to "resources/public/js/out/app.js"
:pretty-print true}}}})
2 ответа
Вы уверены, что на самом деле строили банку с lein uberjar
раньше, когда это работало? У вас нет основного пространства имен, вместо этого в зависимости от lein-ring
плагин для изготовления одного для вас, что означает, что вы должны работать lein ring uberjar
вместо.
Если у вас нет :main
Пространство имен в project.clj, leiningen (по крайней мере, в последних версиях) по умолчанию будет clojure.main. Если вы распакуете jar-файл и загляните внутрь META-INF/MANIFEST.MF
, ты можешь проверить. Вы увидите строку, которая выглядит следующим образом:
Main-Class: clojure.main
Добавьте сопоставление, как это, чтобы установить основной класс:
:main whatever.core
(при условии, что вы хотите -main
функция в этом пространстве имен).