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-case
はnil
と呼ばれるようです。私が正しく理解しているのは、これはUberjarsで起こっているAOTコンパイルのためですが、この問題がなぜ正確に起こるのかよくわかりません...私はすでにAOTを読み込もうとしましたが、役に立たないものは見つかりませんでした。私にAOTの内部の仕組みを説明できますか?
関連するすべてのコードを[MCVE](http://stackoverflow.com/help/mcve)として教えてください。 –
コードを実行するためにAOTが必要ですか?それはAOTコンパイルなしで実行されますか?あなたは言わなかった。 AOTは、必要に応じてコンパイルされるのではなく、何らかのファイルが最初にコンパイルされることを意味します。 (これは一般的な考えですが、私の声明では覚えていない微妙な点があると確信しています) – Mars
エラーを追跡するのに些細なことはありませんか?なぜAOTを責めますか? 'msg'はどこから来ますか?あなたはデバッガや、 'nil'のためのprint文やテストの追加のような簡単な試みをしましたか? 'count'は' nil'に対して0を返します。 'nil'はどこかから来ているに違いない。あっち見て。たぶんこれらのコメントはあまりにも明白です。私がちょうど理解していない場合私の謝罪、しかしあなたは文脈について何も私たちに語っていない。このエラーがAOTコンパイルでのみ発生している場合は、ファイルを別の順序でコンパイルすることで回避できますか?暗闇の中でちょうど一発。 – Mars