我已经开发了30多个Clojure项目,但这是我第一次尝试Clojurescript。我使用重新框架构建了一个SPA,现在我正在尝试为它创建uberjar。当我运行lein uberjar时,会收到以下错误消息:
警告: jar中不存在指定的主类。它可能无法按预期执行。包含主方法的命名空间中可能缺少gen-class指令,或者名称空间尚未编译。
我已经设置了project.clj的服务器端部分,类似于其他Clojure项目。
src/clj中.src/cljs中main位于驻留在src/clj/ordering中的文件server_core.clj中。(:gen-class)存在于server_core.clj中。-main存在于server_core.clj中:
(defn -main & args)project.clj包括用于uberjar的以下指令:
:uberjar {:aot :all :source-path "src/clj“:env {:production } :main ordering.server-core :hooks leiningen.cljsbuild}}main和target-path在project.clj中的指令如下:
::主^:跳过-aot命令。服务器-核心:目标路径"target/%s")我想创建这个uberjar,并将其包含在Dockerfile中,就像我对其他Clojure项目所做的一样。
更新:添加project.clj
(defproject ordering "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.9.0"]
[org.clojure/clojurescript "1.10.238"]
[org.clojure/core.async "0.4.474"]
;; clojurescript 3rd party
[re-frame/re-frame "0.10.5"]
[day8.re-frame/test "0.1.5"]
[day8.re-frame/http-fx "0.1.6"]
[re-frame-datatable "0.6.0"]
[com.rpl/specter "1.1.1"]
[cljsjs/firebase "3.5.3-0"]
[reagent "0.8.0"]
[expound "0.6.0"]
[metosin/reitit "0.1.1-SNAPSHOT"]
[metosin/reitit-ring "0.1.1-SNAPSHOT"]
[metosin/reitit-spec "0.1.1-SNAPSHOT"]
[metosin/muuntaja "0.5.0"]
[cljs-ajax "0.7.3"]
[re-com "2.1.0"]
[garden "1.3.5"]
[ring-logger-timbre "0.7.5"]
[ring/ring-jetty-adapter "1.6.2"]
;; common
[clj-time "0.13.0"]
[cheshire "5.7.1"]
[com.taoensso/timbre "4.10.0"]
[commons-codec/commons-codec "1.11"]
;; google
[com.google.cloud/google-cloud-storage "1.27.0"]
[com.google.firebase/firebase-admin "6.0.0"]
[ns-tracker "0.3.1"]]
:plugins [[lein-cljsbuild "1.1.7"]
[lein-garden "0.3.0"]
[lein-ring "0.9.7"]]
:ring {:init ordering.server-core/init
:destroy ordering.server-core/destroy
:handler ordering.handler/app
:auto-reload? true
:port 3000
:nrepl {:start? true}}
:min-lein-version "2.5.3"
:source-paths ["src/cljs" "src/clj"]
:test-paths ["test/cljs" "test/clj"]
:clean-targets ^{:protect false} ["resources/public/js/compiled" "target"
"test/js"
"resources/public/css"]
:figwheel {:css-dirs ["resources/public/css"]}
:garden {:builds [{:id "screen"
:source-paths ["src/styles"]
:stylesheet ordering.screen/screen
:compiler {:output-to "resources/public/css/screen.css"
:pretty-print? true}}]}
:prep-tasks [["garden" "once"]]
:repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}
:profiles
{:dev
{:dependencies [[fipp/fipp "0.6.12"]
[binaryage/devtools "0.9.10"]
[figwheel-sidecar "0.5.16"]
[re-frisk "0.5.4"]
[com.cemerick/piggieback "0.2.2"]
[doo "0.1.10"]
[javax.servlet/servlet-api "2.5"]
[clj-http "3.9.0"]
[ring/ring-mock "0.3.1"]]
:plugins [[lein-figwheel "0.5.16"]
[lein-doo "0.1.10"]]
}
:hooks [leiningen.cljsbuild]
:uberjar {:aot :all
:source-paths ["src/clj"]
:env {:production true}
:main ordering.server-core
:hooks [leiningen.cljsbuild]}}
:cljsbuild
{:builds
[{:id "dev"
:source-paths ["src/cljs"]
:figwheel {:on-jsload "ordering.core/mount-root"}
:compiler {:main ordering.core
:closure-defines {"goog.DEBUG" true
"clairvoyant.core.devmode" true}
:output-to "resources/public/js/compiled/dev/app.js"
:output-dir "resources/public/js/compiled/dev/out"
:asset-path "js/compiled/dev/out"
:source-map-timestamp true
:preloads [devtools.preload
re-frisk.preload]
:external-config {:devtools/config {:features-to-install :all}}
}}
{:id "min"
:source-paths ["src/cljs"]
:compiler {:main ordering.core
:output-to "resources/public/js/compiled/app.js"
:output-dir "resources/public/js/compiled/out"
:optimizations :advanced
:asset-path "js/compiled/out"
:closure-defines {goog.DEBUG false}
:pretty-print false}}
{:id "test"
:source-paths ["src/cljs" "test/cljs"]
:compiler {:main ordering.runner
:output-to "resources/public/js/compiled/test.js"
:output-dir "resources/public/js/compiled/test/out"
:optimizations :none}}
]}
:doo {:build "test"
:alias {:default [:chrome]}}
:main ^:skip-aot ordering.server-core
:target-path "target/%s")发布于 2018-05-14 06:47:01
我不确定导致您的具体问题的原因,但我也是最近才开始使用CLJS和创建了一个模板项目,这两种方法都适用于doo测试框架和doo。
~/expr/cljs-template > lein doo phantom test once
;; ======================================================================
;; Testing with Phantom:
doorunner - beginning
doorunner - end
Testing tst.flintstones.dino
Beginning dino tests...
globalObject: #js {:a 1, :b 2, :c 3}
(-> % .-b (+ 5) => 7
(js/makeDino) => #js {:desc blue dino-dog, :says #object[Function]}
dino.desc => blue dino-dog
dino.says(5) => Ruff-Ruff-Ruff-Ruff-Ruff!
Finished dino tests...
Testing tst.flintstones.wilma
Beginning wilma tests...
Finished wilma tests...
Beginning wilma tests...
wilmaPhony/stats: #js {:lipstick red, :height 5.5}
wilma => #js {:desc patient housewife, :says #object[Function]}
Finished wilma tests...
Testing tst.flintstones.pebbles
Beginning pebbles tests...
Finished pebbles tests...
Ran 5 tests containing 10 assertions.
0 failures, 0 errors.它也适用于lein uberjar。
~/expr/cljs-template > lein uberjar
Created /home/alan/expr/cljs-template/target/flintstones-0.1.0-SNAPSHOT.jar
Created /home/alan/expr/cljs-template/target/flintstones-0.1.0-SNAPSHOT-standalone.jar您可能能够逐个发现项目与项目之间的差异,或者您可以增量地粘贴到代码中,频繁地暂停lein clean; lein uberjar以查看什么时候新的东西会导致它失败。每当有疑问时,一定要执行clean步骤,而且每次更改project.clj时都要这样做,否则旧的构建工件可能会使事情变得一团糟。
我会对你发现的原因感兴趣。
https://stackoverflow.com/questions/50321787
复制相似问题