tonsky / tongue

Do-it-yourself i18n library for Clojure/Script
Eclipse Public License 1.0
307 stars 19 forks source link

tongue doesn't work with [org.clojure/spec.alpha "0.1.134"] #12

Closed middlesphere closed 6 years ago

middlesphere commented 6 years ago

Nikita, hello!

If I use tongue and spec.alpha "0.1.123" everything works fine. But, if I use tongue with spec.alpha "0.1.134" then I got Exception below.

My project.clj is:

(defproject test01 "0.0.1-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.9.0-beta2"]
                 ;;spec
                 [org.clojure/spec.alpha "0.1.134"]
                 [org.clojure/core.specs.alpha "0.1.24"]
                 [org.clojure/test.check "0.9.0"] 

                 ;; async network communications
                 [net.async/async "0.1.0" :exclusions [[org.clojure/clojure]
                                                       [org.clojure/tools.logging]
                                                       [org.clojure/core.async]]]

                 ;; server side web development components
                 [org.immutant/web "2.1.9" :exclusions [ring/ring-core]]
                 [tongue "0.2.2"]]
  :main test01.core
  :profiles {:dev {:global-vars {*warn-on-reflection* true
                                 *assert* false}}
             :uberjar {:aot :all}}
  :omit-source true)

My core.clj is:

(ns test01.core
  (:gen-class)
  (:require [clojure.string :as str]
            [test01.dictionaries :as dict]))

(defn -main [& args]
  (println (dict/translate :en :index/title)))

My dictionaries.clj is:

(ns test01.dictionaries
  (:require [tongue.core :as tongue]
            [clojure.string :as str]))

(defn accept-lang
  "returns keyword of browser language from ring request."
  [request]
  (if-let [lang ((request :headers) "accept-language")]
    (keyword (first (str/split lang  #",")))
    :en))

(def dicts
  {:en              {:index/title "Welcome to index page." 
                     :about/title "About service."
                     :about/body  "Security service for authentication and authorization."
                     :password-login-page/login-button "Login"
                     :wrong-password-page/msg "Invalid login or password."
                     :index/not-found "Page not found."}
   :ru              {:index/title "Добро пожаловать на главную страницу." 
                     :about/title "О сервисе"
                     :about/body  "сервис аутентификации и авторизации."
                     :password-login-page/login-button "Войти"
                     :wrong-password-page/msg "Неверное имя пользователя или пароль."
                     :index/not-found "Страница не найдена."}
   :tongue/fallback :en})

(def translate (tongue/build-translate dicts))

So, stacktrace is:

~/IdeaProjects/test01 $ java -jar /Users/mike/IdeaProjects/test01/target/test01-0.0.1-SNAPSHOT-standalone.jar Exception in thread "main" java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at clojure.lang.RT.classForName(RT.java:2204) at clojure.lang.RT.classForName(RT.java:2213) at clojure.lang.RT.loadClassForName(RT.java:2232) at clojure.lang.RT.load(RT.java:450) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn6550.invoke(core.clj:6051) at clojure.core$load.invokeStatic(core.clj:6050) at clojure.core$load.doInvoke(core.clj:6034) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5853) at clojure.core$load_one.invoke(core.clj:5848) at clojure.core$load_lib$fn6495.invoke(core.clj:5893) at clojure.core$load_lib.invokeStatic(core.clj:5892) at clojure.core$load_lib.doInvoke(core.clj:5873) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5930) at clojure.core$load_libs.doInvoke(core.clj:5914) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5952) at clojure.core$require.doInvoke(core.clj:5952) at clojure.lang.RestFn.invoke(RestFn.java:512) at tongue.core$loading6436auto__185.invoke(core.cljc:1) at tongue.coreinit.load(Unknown Source) at tongue.coreinit.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at clojure.lang.RT.classForName(RT.java:2204) at clojure.lang.RT.classForName(RT.java:2213) at clojure.lang.RT.loadClassForName(RT.java:2232) at clojure.lang.RT.load(RT.java:450) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn__6550.invoke(core.clj:6051) at clojure.core$load.invokeStatic(core.clj:6050) at clojure.core$load.doInvoke(core.clj:6034) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5853) at clojure.core$load_one.invoke(core.clj:5848) at clojure.core$load_lib$fn6495.invoke(core.clj:5893) at clojure.core$load_lib.invokeStatic(core.clj:5892) at clojure.core$load_lib.doInvoke(core.clj:5873) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5930) at clojure.core$load_libs.doInvoke(core.clj:5914) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5952) at clojure.core$require.doInvoke(core.clj:5952) at clojure.lang.RestFn.invoke(RestFn.java:421) at test01.dictionaries$loading6436auto__183.invoke(dictionaries.clj:1) at test01.dictionariesinit.load(Unknown Source) at test01.dictionariesinit.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at clojure.lang.RT.classForName(RT.java:2204) at clojure.lang.RT.classForName(RT.java:2213) at clojure.lang.RT.loadClassForName(RT.java:2232) at clojure.lang.RT.load(RT.java:450) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn6550.invoke(core.clj:6051) at clojure.core$load.invokeStatic(core.clj:6050) at clojure.core$load.doInvoke(core.clj:6034) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5853) at clojure.core$load_one.invoke(core.clj:5848) at clojure.core$load_lib$fn6495.invoke(core.clj:5893) at clojure.core$load_lib.invokeStatic(core.clj:5892) at clojure.core$load_lib.doInvoke(core.clj:5873) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5930) at clojure.core$load_libs.doInvoke(core.clj:5914) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5952) at clojure.core$require.doInvoke(core.clj:5952) at clojure.lang.RestFn.invoke(RestFn.java:421) at test01.core$loading6436auto__181.invoke(core.clj:1) at test01.coreinit.load(Unknown Source) at test01.coreinit.(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at clojure.lang.RT.classForName(RT.java:2204) at clojure.lang.RT.classForName(RT.java:2213) at clojure.lang.RT.loadClassForName(RT.java:2232) at clojure.lang.RT.load(RT.java:450) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn6550.invoke(core.clj:6051) at clojure.core$load.invokeStatic(core.clj:6050) at clojure.core$load.doInvoke(core.clj:6034) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:381) at clojure.lang.Util.loadWithClass(Util.java:250) at test01.core.(Unknown Source) Caused by: java.lang.Exception: No namespace: clojure.future, compiling:(clojure/core/specs/alpha.clj:1:1), compiling:(clojure/future.clj:1:1) at clojure.lang.Compiler.checkSpecs(Compiler.java:6891) at clojure.lang.Compiler.macroexpand1(Compiler.java:6907) at clojure.lang.Compiler.macroexpand(Compiler.java:6972) at clojure.lang.Compiler.eval(Compiler.java:7046) at clojure.lang.Compiler.load(Compiler.java:7514) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.core$load$fn6550.invoke(core.clj:6051) at clojure.core$load.invokeStatic(core.clj:6050) at clojure.core$load.doInvoke(core.clj:6034) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5853) at clojure.core$load_one.invoke(core.clj:5848) at clojure.core$load_lib$fn6495.invoke(core.clj:5893) at clojure.core$load_lib.invokeStatic(core.clj:5892) at clojure.core$load_lib.doInvoke(core.clj:5873) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5930) at clojure.core$load_libs.doInvoke(core.clj:5914) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5952) at clojure.core$require.doInvoke(core.clj:5952) at clojure.lang.RestFn.invoke(RestFn.java:457) at tongue.inst$loading6436auto__187.invoke(inst.cljc:1) at tongue.instinit.load(Unknown Source) at tongue.instinit.(Unknown Source) ... 98 more Caused by: java.lang.Exception: No namespace: clojure.future, compiling:(clojure/core/specs/alpha.clj:1:1) at clojure.lang.Compiler.load(Compiler.java:7526) at clojure.lang.RT.loadResourceScript(RT.java:379) at clojure.lang.RT.loadResourceScript(RT.java:370) at clojure.lang.RT.load(RT.java:460) at clojure.lang.RT.load(RT.java:426) at clojure.lang.Compiler.ensureMacroCheck(Compiler.java:6877) at clojure.lang.Compiler.checkSpecs(Compiler.java:6889) ... 127 more Caused by: java.lang.Exception: No namespace: clojure.future at clojure.core$refer.invokeStatic(core.clj:4205) at clojure.core$refer.doInvoke(core.clj:4188) at clojure.lang.RestFn.applyTo(RestFn.java:139) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_lib.invokeStatic(core.clj:5911) at clojure.core$load_lib.doInvoke(core.clj:5873) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$load_libs.invokeStatic(core.clj:5930) at clojure.core$load_libs.doInvoke(core.clj:5914) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:659) at clojure.core$require.invokeStatic(core.clj:5952) at clojure.core$require.doInvoke(core.clj:5952) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.core.specs.alpha$eval15$loading6436auto____16.invoke(alpha.clj:1) at clojure.core.specs.alpha$eval15.invokeStatic(alpha.clj:1) at clojure.core.specs.alpha$eval15.invoke(alpha.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7062) at clojure.lang.Compiler.eval(Compiler.java:7051) at clojure.lang.Compiler.load(Compiler.java:7514) ... 133 more

tonsky commented 6 years ago

Thanks! I’ll take a look

tonsky commented 6 years ago

Sorry, can’t reproduce. I’ve bumped clojure and clojure-future-spec versions in 0.2.3 though

marksto commented 3 years ago

Hi folks,

Just for the record. I ran into this problem not too long ago and found the root cause in my ~/.lein/profiles.clj file. Cleaning it of obsolete plugins and dependencies (which were probably using old versions of Сlojure) helped me get rid of this nasty AOT issue.