2012-12-06 14 views
5

ich war in der Lage, diese Befehle zu verwenden, um eine Probe Web-App von instrcution auf dieser WebsiteWie erstellt man die WAR-Datei für eine Clojure Noir-Webanwendung?

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

lein new noir my-project-name 
lein run 

(Ich verwende Leiningen 2.0.0-preview10 auf Java 1.7.0_09 zu erzeugen und laufen Java HotSpot (TM) Client VM)

Die Starter-Webanwendung läuft zwar einwandfrei, aber ich möchte die WAR-Datei generieren, die ich manuell auf meinem Anwendungsserver (Websphere) bereitstellen kann.

Welcher Befehl oder Konfiguration für Leingen 2 wird benötigt, um eine War-Datei für ein Noir-Projekt zu generieren?

Um zu klären, dieser Befehl "neue noir webpoc2 lein" ein noir Projekt mit diesem erzeugen .clj

(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) 

Datei Wenn ich Ring in die Datei

cl hinzufügen
:ring { 
        :handler webpoc1.server/handler 

} 

und lein laufen Ring uberwar, bekomme ich diese:

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 

Da ich neu bin Noir (und Clojure), ich bin ratlos zu figur versuchen e diese

Antwort

3

Beantworten Sie meine Frage/Dokumentieren meine Mühen in Gliedern Noir Ring Abhängigkeiten für andere Neulinge. Sie können ein Noir-Projekt mit dem Befehl "lein new noir ..." generieren, aber diese Dateien wie folgt aktualisieren, wenn Sie eine WAR-Datei wünschen.

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}))) 

Dann führen Sie den folgenden

  1. "lein run" (überprüfen, ob Ihre Seiten zugänglich sind),
  2. "lein Ring-Server" (überprüfen, ob Ihre Seiten zugänglich sind),
  3. und "lein Ringkrieg" schließlich - Sie als Krieg Datei in Zielverzeichnis
2

Haben Sie die handler in webpoc1.server deklariert, die Sie referenzieren? Etwas wie folgt aus:

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

http://www.webnoir.org/tutorials/others/ bietet Anweisungen, wie Noir mit Ring zu verwenden.

+0

Die Frage war über widersprüchlichen Versionen sehen sollten die JAR-Dateiabhängigkeit. Noir "1.3.0-Beta3" Jar-Datei enthalten eine ältere Version von Hicup inkompatibel mit Lein-Ring – user193116