2012-12-06 15 views
5

sono stato in grado di utilizzare questi comandi per generare ed eseguire un'applicazione di esempio web da instrcution su questo sito webCome creare il file war per un'applicazione Web Clojure Noir?

https://github.com/ibdknox/lein-noir

lein new noir my-project-name 
lein run 

(sto usando Leiningen 2.0.0-preview10 su Java 1.7.0_09 Java HotSpot (TM) Client VM

L'app web di avviamento funziona correttamente ma voglio generare il file di guerra che posso distribuire manualmente sul mio server delle applicazioni (Websphere).

Quale comando o configurazione per Leingen 2 è necessario per generare un file di guerra per un progetto Noir?

Per chiarire, questo comando "Lein nuova webpoc2 noir" generare un progetto di noir con questo .clj il file

(defproject webpoc1 "0.1.0-SNAPSHOT" 
      :description "FIXME: write this!" 
      :dependencies [[org.clojure/clojure "1.4.0"] 
          [noir "1.3.0-beta3"]] 
      :main webpoc1.server) 

Se aggiungo anello al file cl

:ring { 
        :handler webpoc1.server/handler 

} 

, ed eseguire Lein anello uberwar, ottengo questo:

Exception in thread "main" java.lang.RuntimeException: No such var: webpoc1.server/handler, compiling:(
/servlet.clj:1) 
     at clojure.lang.Compiler.analyze(Compiler.java:6281) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3497) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6457) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618) 
     at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054) 
     at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3548) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6457) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3497) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6457) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5618) 
     at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5054) 
     at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3674) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6453) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6443) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.access$100(Compiler.java:37) 
     at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:518) 
     at clojure.lang.Compiler.analyzeSeq(Compiler.java:6455) 
     at clojure.lang.Compiler.analyze(Compiler.java:6262) 
     at clojure.lang.Compiler.analyze(Compiler.java:6223) 
     at clojure.lang.Compiler.compile1(Compiler.java:7030) 
     at clojure.lang.Compiler.compile1(Compiler.java:7025) 
     at clojure.lang.Compiler.compile(Compiler.java:7097) 
     at clojure.lang.RT.compile(RT.java:387) 
     at clojure.lang.RT.load(RT.java:427) 
     at clojure.lang.RT.load(RT.java:400) 
     at clojure.core$load$fn__4890.invoke(core.clj:5415) 
     at clojure.core$load.doInvoke(core.clj:5414) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invoke(core.clj:5227) 
     at clojure.core$compile$fn__4895.invoke(core.clj:5426) 
     at clojure.core$compile.invoke(core.clj:5425) 
     at user$eval3.invoke(NO_SOURCE_FILE:1) 
     at clojure.lang.Compiler.eval(Compiler.java:6511) 
     at clojure.lang.Compiler.eval(Compiler.java:6500) 
     at clojure.lang.Compiler.eval(Compiler.java:6501) 
     at clojure.lang.Compiler.eval(Compiler.java:6477) 
     at clojure.core$eval.invoke(core.clj:2797) 
     at clojure.main$eval_opt.invoke(main.clj:297) 
     at clojure.main$initialize.invoke(main.clj:316) 
     at clojure.main$null_opt.invoke(main.clj:349) 
     at clojure.main$main.doInvoke(main.clj:427) 
     at clojure.lang.RestFn.invoke(RestFn.java:421) 
     at clojure.lang.Var.invoke(Var.java:419) 
     at clojure.lang.AFn.applyToHelper(AFn.java:163) 
     at clojure.lang.Var.applyTo(Var.java:532) 
     at clojure.main.main(main.java:37) 
Caused by: java.lang.RuntimeException: No such var: webpoc1.server/handler 
     at clojure.lang.Util.runtimeException(Util.java:170) 
     at clojure.lang.Compiler.resolveIn(Compiler.java:6740) 
     at clojure.lang.Compiler.resolve(Compiler.java:6710) 
     at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6671) 
     at clojure.lang.Compiler.analyze(Compiler.java:6244) 
     ... 60 more 
Subprocess failed 

Dato che io sono nuovo di Noir (e Clojure), sono in perdita cercando di figur e questo fuori

risposta

3

Rispondendo alla mia domanda/documentando le mie ricerche nel leingen noir ring dependencies per altri neofiti. È possibile generare un progetto noir con il comando "lein new noir ...", ma aggiornare questi file come segue se si desidera un file war.

project.clj

(defproject noir3 "0.1.0-SNAPSHOT" 
      :description "FIXME: write this!" 
      :dependencies [[org.clojure/clojure "1.4.0"] 
          [noir "1.3.0-beta10"] 
          [hiccup "1.0.2"] 
          [cheshire "4.0.3"] 
          ] 
      :plugins [[lein-ring "0.7.5"]] 
      :ring {:handler noir3.server/handler}    

      :main noir3.server) 

server.clj

(ns noir3.server 
    (:require [noir.server :as server])) 

;;(server/load-views-ns 'noir3.views) 

(server/load-views "src/noir3/views/") 


(def handler (server/gen-handler {:mode :dev 
            :ns 'noir3})) 

(defn -main [& m] 
    (let [mode (keyword (or (first m) :dev)) 
     port (Integer. (get (System/getenv) "PORT" "8080"))] 
    (server/start port {:mode mode 
         :ns 'noir3}))) 

Poi, eseguire il seguente

  1. "run lein" (verificare se le pagine sono accessibili),
  2. "server anello lein" (verificare se le pagine sono accessibili),
  3. e, infine, "la guerra anello Lein" - si dovrebbe vedere come file di guerra in obiettivo dir
2

Avete dichiarato lo handler in webpoc1.server a cui state facendo riferimento? Qualcosa di simile a questo:

(def handler 
    (server/gen-handler {:mode :prod 
         :ns *ns*})) 

http://www.webnoir.org/tutorials/others/ offre istruzioni su come utilizzare Noir con l'anello.

+0

La questione era di circa versioni contrastanti di la dipendenza del file jar. il file jar "1.3.0-beta3" del noir includeva una versione precedente di hicup incompatibile con lein-ring – user193116

Problemi correlati