«Предупреждение: указанный основной класс не существует в банке». в объединенном проекте перестройки Clojure + Clojurescript - PullRequest
0 голосов
/ 14 мая 2018

Я разработал более 30 проектов Clojure, но это мой первый набег в Clojurescript.Я построил SPA, используя re-frame, и теперь я пытаюсь создать для него uberjar.Когда я запускаю lein uberjar, я получаю следующее сообщение об ошибке:

Предупреждение. Указанный основной класс не существует в банке.Это может быть не выполнимо, как ожидалось.Директива gen-class может отсутствовать в пространстве имен, содержащем основной метод, или пространство имен не было AOT-скомпилировано.

Я настроил раздел на стороне сервера project.cljаналогично другим проектам Clojure.

  • Все исходные файлы на стороне сервера находятся в src/clj.
  • Все исходные файлы Clojurescript находятся в src/cljs
  • main находится в файле server_core.clj, который находится в src/clj/ordering.
  • (:gen-class) присутствует в server_core.clj.
  • -main существует вserver_core.clj:

    (defn -main [& args] (main))

  • project.clj включает следующую директиву для uberjar:

    :uberjar {:aot :all
              :source-paths ["src/clj"]
              :env {:production true}
              :main ordering.server-core
              :hooks [leiningen.cljsbuild]}}
    
  • Директивы main и target-path в project.clj следующие:

    :main ^:skip-aot ordering.server-core
    :target-path "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")

1 Ответ

0 голосов
/ 14 мая 2018

Я не уверен в причине вашей конкретной проблемы, но я также недавно начал использовать CLJS и создал шаблонный проект , который работает как с doo, так и с figwheel.

~/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, иначе старые артефакты сборки могут действительно испортить ситуацию.

Мне было бы интересно узнать, что вы обнаружили как причину.

...