Clojure lein uberjar-未正确设置主类?
在一个全新的Clojure lein uberjar-未正确设置主类?,clojure,clojurescript,leiningen,Clojure,Clojurescript,Leiningen,在一个全新的lein-new-re-frame bc+handler应用程序上,如果我lein-uberjar或lein-jar它似乎没有正确设置主类。在编译的最后,它告诉我 警告:jar中不存在指定的主类。它可能无法按预期执行。包含main方法的命名空间中可能缺少gen class指令,或者该命名空间尚未进行AOT编译。 以下是使用re frame+处理程序模板创建的server.clj和project.clj: server.clj: (ns bc.server (:require [b
lein-new-re-frame bc+handler
应用程序上,如果我lein-uberjar
或lein-jar
它似乎没有正确设置主类。在编译的最后,它告诉我
警告:jar中不存在指定的主类。它可能无法按预期执行。包含main方法的命名空间中可能缺少gen class指令,或者该命名空间尚未进行AOT编译。
以下是使用re frame+处理程序模板创建的server.clj和project.clj:
server.clj:
(ns bc.server
(:require [bc.handler :refer [handler]]
[config.core :refer [env]]
[ring.adapter.jetty :refer [run-jetty]])
(:gen-class))
(defn -main [& args]
(let [port (Integer/parseInt (or (env :port) "3000"))]
(run-jetty handler {:port port :join? false})))
project.clj:
(defproject bc "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.1"]
[org.clojure/clojurescript "1.10.597"
:exclusions [com.google.javascript/closure-compiler-unshaded
org.clojure/google-closure-library
org.clojure/google-closure-library-third-party]]
[thheller/shadow-cljs "2.8.83"]
[reagent "0.8.1"]
[re-frame "0.10.9"]
[compojure "1.6.1"]
[yogthos/config "1.1.7"]
[ring "1.7.1"]]
:plugins [
[lein-shell "0.5.0"]]
:min-lein-version "2.5.3"
:source-paths ["src/clj" "src/cljs"]
:clean-targets ^{:protect false} ["resources/public/js/compiled" "target"]
:shell {:commands {"open" {:windows ["cmd" "/c" "start"]
:macosx "open"
:linux "xdg-open"}}}
:aliases {"dev" ["with-profile" "dev" "do"
["clean"]
["run" "-m" "shadow.cljs.devtools.cli" "watch" "app"]]
"prod" ["with-profile" "prod" "do"
["clean"]
["run" "-m" "shadow.cljs.devtools.cli" "release" "app"]]
"build-report" ["with-profile" "prod" "do"
["clean"]
["run" "-m" "shadow.cljs.devtools.cli" "run" "shadow.cljs.build-report" "app" "target/build-report.html"]
["shell" "open" "target/build-report.html"]]
"karma" ["with-profile" "prod" "do"
["clean"]
["run" "-m" "shadow.cljs.devtools.cli" "compile" "karma-test"]
["shell" "karma" "start" "--single-run" "--reporters" "junit,dots"]]}
:profiles
{:dev
{:dependencies [[binaryage/devtools "0.9.11"]]}
:prod { }
:uberjar {:source-paths ["env/prod/clj"]
:omit-source true
:main bc.server
:aot [bc.server]
:uberjar-name "bc.jar"
:prep-tasks ["compile" ["prod"]]}
})
当我运行leinuberjar时,它确实会生成一个jar文件,但当我尝试运行它时,它会出错,告诉我它不包含一个主类
我做错了什么?您需要告诉leiningen您的主要功能是什么名称空间。在
project.clj
中:
:main my.service.runner
发件人:
您的uberjar配置文件在
:prep tasks
中调用[“compile”[“prod”]]
。您的“prod”
别名调用“clean”
和“target”
列在:clean targets
中
本质上,您的uberjar会删除已编译的Clojure代码。在uberjar配置文件中,它会这样做,不是吗?(编辑:)我将
:main bc.server
行从uberjar配置文件中移出,但它仍然不想包含我没有意识到您的项目中有滚动条的主要功能。clj代码片段:-)dpassen在我上面的回答是正确的。噢,为什么这是re-frame lein模板中的默认行为?要解决此问题,我是否应该从产品别名中删除[“clean”]
?现在我要尝试一下,我看了一下重建框架模板项目,瞧,这个项目已经存在一个问题。