Я использую библиотеку Clojure java-time
, которая является оболочкой java.time
[1].
Моя программа работает, когда я вызываю lein run
или когда я вызываю функции через repl. С другой стороны, когда я пытаюсь сделать lein uberjar
, я получаю следующую ошибку с задействованными классами:
$ lein uberjar
Compiling foo.cli
Compiling foo.core
Compiling foo.holidays
nil
Syntax error (ClassCastException) compiling at (/tmp/form-init8528909580728167374.clj:1:73).
class java_time.graph.Types cannot be cast to class java_time.graph.Types (java_time.graph.Types is in unnamed module of loader 'app'; java_time.graph.Types is in unnamed module of loader clojure.lang.DynamicClassLoader @141c66db)
Full report at:
/tmp/clojure-6795557396101417445.edn
Compilation failed: Subprocess failed
Я выделил, какое выражение вызывает эту проблему, и это:
(java-time/minus (java-time/local-date) (java-time/period 2 :days))
Я не уверен, почему это не удается, и ошибка довольно загадочна. Могу поспорить, что компилятор запутается в приведении некоторых классов при создании uberjar, но меня удивляет, что repl работает нормально. Это связано с :aot
, используемым для создания uberjar?
Это фрагмент файла project.clj
, касающийся этого:
(defproject foo
...
:main ^:skip-aot foo.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all
:jvm-opts ["-Dclojure.compiler.direct-linking=true"]}})
.edn
, созданном компилятором, не так много информации, которой нет в сообщении об ошибке... - person Navarro   schedule 07.10.2020org.apache.poi
для написания файлов Excel. И это прекрасно работает! У меня проблемы только с оболочкойjava.time
java-time
, с функциямиplus
иminus
... - person Navarro   schedule 08.10.2020(some-> 1614703906000 instant)
(но не с(-> 1614703906000 instant)
и опять же это происходит только с флагом прямой ссылки. Вроде та же проблема, но я не понимаю вашей проблемы сminus
. Все страньше и страньше - person Andy   schedule 02.03.2021