Использование `defrecord` и` defprotocol` вызвало ошибку компиляции: java.lang.IllegalArgumentException - PullRequest
0 голосов
/ 23 сентября 2019

redis.clj:

(ns proj.redis
  (:require
   [celtuce.connector :as conn]
   [taoensso.timbre :as log]
   [mount.core :as mount]
   [proj.global :as g]))

(mount/defstate redis-client
  :start (let [port (get-in @g/config [:port :redis])
               connector (conn/redis-server (str "redis://localhost:" port))]
           (log/info (str "redis connection established on port: " port "."))
           connector)
  :stop (do
          (conn/shutdown redis-client)
          (log/info "redis connection closed.")))

(def cmds
  (conn/commands-sync redis-client))

$ lein uberjar

java.lang.IllegalArgumentException: Нет реализации метода:: синхронизация команд протокола: # 'celtuce.Соединитель / RedisConnector найден для класса: mount.core.DerefableState, компиляция: (redis.clj: 24: 3) Исключение в потоке "main" java.lang.IllegalArgumentException: Нет реализации метода:: синхронизация команд протокола: # 'celtuce.connector / RedisConnector найден для класса: mount.core.DerefableState, компиляция: (redis.clj: 24: 3)

Кажется, проверка синтаксиса не прошла при компиляции.

enter image description here

image

Я также обнаружил, redis-client - это celtuce.connector.RedisServer, и (def cmds (conn/commands-sync redis-client)) можно запустить в repl, но не скомпилировать,Потому что

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...