Lein uberjar запускает реплику, а не мое приложение

У меня есть проект Clojure / Ring / Clojurescript, который я развертываю с помощью lein uberjar, а затем запускаю с помощью java -jar whatever-0.1-standalone.jar. До недавнего времени все работало нормально.

Теперь, когда я запускаю его, мне предоставляется REPL, вот так;

Clojure 1.7.0 user=>

Думая, что это должно быть что-то в моей кодовой базе, я вернулся (с помощью git) к состоянию, которое, как я знаю, работало, но проблема все еще возникает.

Поскольку проблема не в моей кодовой базе, я попробовал старую версию leiningen - все равно не повезло.

Вот мой project.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}}}})

person user16973    schedule 27.08.2015    source источник


Ответы (2)


Вы уверены, что раньше собирали jar с lein uberjar, когда он работал? У вас нет основного пространства имен, вместо этого он зависит от lein-ring плагина, который создаст его для вас, что означает, что вы должны вместо этого запустить lein ring uberjar.

person amalloy    schedule 27.08.2015
comment
Вот и все, спасибо! Я забыл, какую команду запустить, lein ring uberjar прекрасно работает. - person user16973; 27.08.2015
comment
Спасибо! Я столкнулся с той же проблемой! - person paniclater; 21.06.2017

Если у вас нет пространства имен :main в project.clj, leiningen (по крайней мере, последние версии) по умолчанию будет clojure.main. Если распаковать файл jar и заглянуть внутрь META-INF/MANIFEST.MF, можно проверить. Вы увидите строку, которая выглядит так:

Main-Class: clojure.main

Добавьте сопоставление, подобное этому, чтобы установить основной класс:

:main whatever.core (при условии, что вам нужна функция -main в этом пространстве имен).

person Diego Basch    schedule 27.08.2015