clojure - lein uberjar - 没有正确设置主类?
问题描述
在一个新的lein new re-frame bc +handler
应用程序上,如果我lein uberjar
或lein jar
它似乎没有正确设置主类。在编译结束时它告诉我
Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method, or the namespace has not been AOT-compiled.
这是使用 re-frame +handler 模板创建的 server.clj 和 project.clj:
服务器.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})))
项目.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"]]}
})
当我尝试运行它时它会生成一个 jar 文件,lein uberjar
但当我尝试运行它时它会出错,告诉我它不包含主类。
我做错了什么?
解决方案
您的uberjar 个人资料调用["compile" ["prod"]]
. :prep-tasks
您的"prod"
别名调用并列在"clean"
中。"target"
:clean-targets
本质上,您的 uberjar 会删除已编译的 Clojure 代码。
推荐阅读
- javascript - 如何循环数据并创建具有唯一键的结构?
- ruby - 在 Ruby 中,有没有办法在由结构组成的数组中获取项目的索引?
- c# - 在 C# 中获取服务生命周期信息
- vba - 将相同的 Http 从 sub 传递给函数后无法重用
- netlogo - 如何在 20% 到 30% 之间随机提高一个变量?
- android - 如何在android中自动保存从数据库中检索到的Id(唯一编号)
- .net-core - 是否可以禁用表单字段展平
- azure-machine-learning-service - Azure ML:如何访问失败模型部署的日志
- postgresql - 在 Heroku 上将内容从 Contentful 推送到 postgresql
- r - 用文本重现 R 函数调用