2016-04-18 13 views
0

lein uberjarを使ってuberjarをビルドしようとしています。コンパイル時には、以下がスローされます:次のように文字列/小文字を使用して私のプロジェクトをAOTでコンパイルするとNullPointerExceptionがスローされます

Exception in thread "main" java.lang.NullPointerException, compiling:(/tmp/form-init8223412427040046857.clj:1:73) 
    at clojure.lang.Compiler.load(Compiler.java:7391) 
    at clojure.lang.Compiler.loadFile(Compiler.java:7317) 
    at clojure.main$load_script.invokeStatic(main.clj:275) 
    at clojure.main$init_opt.invokeStatic(main.clj:277) 
    at clojure.main$init_opt.invoke(main.clj:277) 
    at clojure.main$initialize.invokeStatic(main.clj:308) 
    at clojure.main$null_opt.invokeStatic(main.clj:342) 
    at clojure.main$null_opt.invoke(main.clj:339) 
    at clojure.main$main.invokeStatic(main.clj:421) 
    at clojure.main$main.doInvoke(main.clj:384) 
    at clojure.lang.RestFn.invoke(RestFn.java:421) 
    at clojure.lang.Var.invoke(Var.java:383) 
    at clojure.lang.AFn.applyToHelper(AFn.java:156) 
    at clojure.lang.Var.applyTo(Var.java:700) 
    at clojure.main.main(main.java:37) 
Caused by: java.lang.NullPointerException 
    at clojure.string$lower_case.invokeStatic(string.clj:217) 
    at clojure.string$lower_case.invoke(string.clj:213) 
    at kappa.joke_classifier$is_jokable_QMARK_.invokeStatic(joke_classifier.clj:32) 
    at kappa.joke_classifier$is_jokable_QMARK_.invoke(joke_classifier.clj:29) 
    at kappa.core$maybe_joke.invokeStatic(core.clj:47) 
    at kappa.core$maybe_joke.invoke(core.clj:45) 
    at clojure.core$run_BANG_$fn__7276.invoke(core.clj:7393) 
    at clojure.lang.PersistentVector.reduce(PersistentVector.java:341) 
    at clojure.core$reduce.invokeStatic(core.clj:6544) 
    at clojure.core$run_BANG_.invokeStatic(core.clj:7388) 
    at clojure.core$run_BANG_.invoke(core.clj:7388) 
    at kappa.core$run.invokeStatic(core.clj:58) 
    at kappa.core$run.invoke(core.clj:53) 
    at kappa.core$_main.invokeStatic(core.clj:66) 
    at kappa.core$_main.doInvoke(core.clj:61) 
    at clojure.lang.RestFn.invoke(RestFn.java:397) 
    at clojure.lang.Var.invoke(Var.java:375) 
    at user$eval5.invokeStatic(form-init8223412427040046857.clj:1) 
    at user$eval5.invoke(form-init8223412427040046857.clj:1) 
    at clojure.lang.Compiler.eval(Compiler.java:6927) 
    at clojure.lang.Compiler.eval(Compiler.java:6917) 
    at clojure.lang.Compiler.load(Compiler.java:7379) 
    ... 14 more 

コードが見えます:

(defn is-jokable? [msg] 
    (and 
    (> 30 (count msg)) 
    (= :positive (.classify classifier (str/lower-case msg))) 
    (< 1 (:positive (.probabilities classifier (str/lower-case msg)))))) 

スタックトレースからわかるように、私の-main関数は、その関数を呼び出します最終的にはis-jokableと呼ばれ、str/lower-casenilと呼ばれるようです。私が正しく理解しているのは、これはUberjarsで起こっているAOTコンパイルのためですが、この問題がなぜ正確に起こるのかよくわかりません...私はすでにAOTを読み込もうとしましたが、役に立たないものは見つかりませんでした。私にAOTの内部の仕組みを説明できますか?

+1

関連するすべてのコードを[MCVE](http://stackoverflow.com/help/mcve)として教えてください。 –

+0

コードを実行するためにAOTが必要ですか?それはAOTコンパイルなしで実行されますか?あなたは言わなかった。 AOTは、必要に応じてコンパイルされるのではなく、何らかのファイルが最初にコンパイルされることを意味します。 (これは一般的な考えですが、私の声明では覚えていない微妙な点があると確信しています) – Mars

+0

エラーを追跡するのに些細なことはありませんか?なぜAOTを責めますか? 'msg'はどこから来ますか?あなたはデバッガや、 'nil'のためのprint文やテストの追加のような簡単な試みをしましたか? 'count'は' nil'に対して0を返します。 'nil'はどこかから来ているに違いない。あっち見て。たぶんこれらのコメントはあまりにも明白です。私がちょうど理解していない場合私の謝罪、しかしあなたは文脈について何も私たちに語っていない。このエラーがAOTコンパイルでのみ発生している場合は、ファイルを別の順序でコンパイルすることで回避できますか?暗闇の中でちょうど一発。 – Mars

答えて

0

私はこれを掲載しているほとんど恥ずかしい、それはあまりにも夜遅くであったに違いない...;)

私は完全にスタックトレースでcompilinginvokeStaticヒントに気を取られ、ちょうど今見つけてしまいましたこれは実際に毎日のバグだったので、マップには存在しないキー/値のペアが含まれていると予想され、nilが問題の関数に渡されました。

有用なコメントありがとうございました!

関連する問題