You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure项目启动报错:无法找到clojure/java/jdbc/ddl类路径,求解决

问题:Clojure项目中找不到clojure/java/jdbc/ddl类的错误修复

我刚开始学习Clojure,项目包含两个文件:project.clj和src/test-clojure-project/core.clj,运行时出现如下错误,求修复方法:

项目文件代码

project.clj

(defproject test-clojure-project "0.1.0-SNAPSHOT"
  :description "A simple Clojure web project"
  :dependencies [[org.clojure/clojure "1.10.0"]
                 [ring "1.10.0"]
                 [ring/ring-jetty-adapter "1.10.0"]
                 [ring/ring-json "0.5.0"]
                 [cheshire "5.10.0"]
                 [org.postgresql/postgresql "42.3.1"]
                 [org.clojure/java.jdbc "0.7.11"]
                ;;  [ring/ring-reload "0.3.1"]
                 ]
  :main ^:skip-aot test-clojure-project.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}})

src/test-clojure-project/core.clj

(ns test-clojure-project.core
  (:require [ring.adapter.jetty :as jetty]
            [ring.util.response :as response]
            [ring.middleware.reload :refer [wrap-reload]]
            [cheshire.core :as json]
            [clojure.java.jdbc :as jdbc]
            [clojure.java.jdbc.ddl :as ddl]))

(def db-spec
  {:subprotocol "postgresql"
   :subname "//localhost/test_db"
   :user "postgres"
   :password "secret"})

(def posts-table
  [:posts
   [:id :serial "PRIMARY KEY"]
   [:content :text]])

(defn create-post [post]
  (jdbc/with-connection db-spec
    (jdbc/insert! :posts
                  {:content (:content post)})))

(defn get-data []
  (jdbc/with-connection db-spec
    (jdbc/query "SELECT * FROM posts")))

(defn handler [request]
  (let [uri (:uri request)]
    (cond
      (= uri "/posts-list")
      (let [response-data (get-data)]
        (response/response (str response-data)))

      (= uri "/create-post")
      (if (= (:request-method request) :post)
        (let [json-data (-> request :body slurp)
              parsed-data (json/parse-string json-data true)
              created-post (create-post parsed-data)]
          (response/response (json/generate-string created-post)))
        (response/response "Invalid request method"))

      :else
      (response/response "Route not found"))))

(defn -main []
  (do
    (println "Server started successfully on port 3000")
    ;; Create the 'posts' table if it doesn't exist
    (jdbc/with-connection db-spec
      (ddl/create-table-ddl posts-table :if-not-exists))
    (jetty/run-jetty (wrap-reload handler) {:port 3000})))

运行错误信息

2023-08-05 17:41:30.332:INFO::main: Logging initialized @1359ms to org.eclipse.jetty.util.log.StdErrLog
Exception in thread "main" Syntax error compiling at (test_clojure_project/core.clj:1:1).
Caused by: java.io.FileNotFoundException: Could not locate clojure/java/jdbc/ddl__init.class, clojure/java/jdbc/ddl.clj or clojure/java/jdbc/ddl.cljc on classpath.

修复步骤

  1. 移除无效的命名空间依赖
    你使用的org.clojure/java.jdbc "0.7.11"版本中,没有单独的clojure.java.jdbc.ddl命名空间,DDL相关函数已经合并到clojure.java.jdbc主命名空间。修改core.clj的require语句,删掉[clojure.java.jdbc.ddl :as ddl],最终ns声明如下:

    (ns test-clojure-project.core
      (:require [ring.adapter.jetty :as jetty]
                [ring.util.response :as response]
                [ring.middleware.reload :refer [wrap-reload]]
                [cheshire.core :as json]
                [clojure.java.jdbc :as jdbc]))
    
  2. 替换DDL函数调用
    将代码中ddl/create-table-ddl改为jdbc/create-table-ddl,对应-main函数中的代码修改为:

    (jdbc/with-db-connection [conn db-spec]
      (jdbc/create-table-ddl posts-table :if-not-exists))
    
  3. 修复废弃的数据库连接函数
    注意jdbc/with-connection在该版本已被废弃,需改用jdbc/with-db-connection,且后续JDBC操作需要传入连接对象:

    • 修改create-post函数:
      (defn create-post [post]
        (jdbc/with-db-connection [conn db-spec]
          (jdbc/insert! conn :posts
                        {:content (:content post)})))
      
    • 修改get-data函数:
      (defn get-data []
        (jdbc/with-db-connection [conn db-spec]
          (jdbc/query conn "SELECT * FROM posts")))
      

完成以上修改后,重新运行项目即可解决该错误。

内容的提问来源于stack exchange,提问作者Bo-Peep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:54:55