3

リングサーバーヘッドレスの構築 -- lein ring server-headless-- しかし、war または uberwar を構築しようとすると、次のエラーが発生し、なぜこれが起こっているのかわかりません。

No namespaces to :aot compile listed in project.clj.
Exception in thread "main" java.lang.ExceptionInInitializerError, compiling:(ring/util/servlet.clj:62)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6416)
at clojure.lang.Compiler.analyze(Compiler.java:6216)
...

Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.RT.classForName(RT.java:2013)
at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:938)
at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:710)
at clojure.lang.Compiler.macroexpand1(Compiler.java:6342)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6395)
... 69 more
Caused by: java.lang.Exception: Cyclic load dependency: [ /servlet ]->/ring/util/servlet->[ /servlet ]
at clojure.core$check_cyclic_dependency.invoke(core.clj:5288)
at clojure.core$load.doInvoke(core.clj:5383)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:401)
at servlet.<clinit>(Unknown Source)
... 76 more

私の project.clj ファイルは次のとおりです。

(defproject myproj "0.1"
:description "the sample"
:dependencies [
    [org.clojure/clojure "1.3.0"]
    [compojure "1.0.4"]
    [hiccup "1.0.0"]
    [clj-json "0.5.0"]
    [ring/ring "1.1.0"]
    [clj-http "0.1.1"]
]   
:plugins [
    [lein-ring "0.7.0"]
]   
:ring {:handler routes/start})

を削除すると、:ring {:handler routes/start}別の場所に NPE が作成されます。

project.clj に何かが欠けているのか、それとも特定のバージョンの lein がこのユース ケースで壊れているのかはわかりません。誰かが私のためにこれを明確にすることができますか?

4

3 に答える 3

2

私は問題を解決しましたが、これは私の側の少しの間違いでした。誰かが同じ間違いを犯した場合に備えて、ここに回答を投稿してください。

src/routes.clj に次のようなものがありました。

(defroutes main-routes
    (GET "/some/path" [& params] (some-code params))
    (route/resources "/")
    (route/not-found "not found"))

(def start (run-jetty (handler/site main-routes) {:port 8080}))

これはすべて、ルートをセットアップし、lein ring サーバー ヘッドレスを介してコマンド ラインから jetty webapp を開始するためのフックを提供するための標準的なコードです。start を関数ではなくグローバルとして宣言したことを除いて。つまり、lein ring server-headless を実行するとまだ機能しますが、lein ring uberwar を実行すると、奇妙な構成になります。完全な jetty サーバーがそのサーブレットで起動しようとし、さらに uberwar がサーブレットを生成し、 jar にパッケージ化しようとしています。

自分のコードを構成例と比較していたとき、def と defn が光学的に非常に似ているため、この違いを見落としていました。とにかく、私はそれを機能させるためにこの変更を加えました:

(defn start [] (run-jetty (handler/site main-routes) {:port 8080}))  
于 2012-07-19T20:19:07.130 に答える
2

私は同じ問題を抱えていました。私の場合、解決策は

レインクリーン

の前に

レインリング ユーバーウォー

実際の問題は、ある時点で、ハンドラーが正しくない/存在しないハンドラーを指していたため、target/classes ディレクトリに servlet.clj が残っていたことだと思います。クリーンを実行すると、このファイルが削除されます。

于 2012-05-20T22:26:25.873 に答える
0

エラーはすべてを示しています.:aotパラメータがプロジェクト構成にありません. :aot の使用については、このリンクを参照してください。

于 2012-05-20T15:40:25.923 に答える