在 clojure 中导入 java lib,它是如何工作的?

Ser*_*ern 3 clojure leiningen

我正在尝试构建我的第一个 clojure leiningen 项目,但在代码中使用特定的 java 类时遇到问题。

在编码时,我正在寻找特定的功能并发现了 DatatypeConverter ( http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html )。然后我必须弄清楚如何导入该库。我对 Maven 一无所知,但我最终有点(受过教育?)猜测我应该在那里寻找该库https://search.maven.org/

所以这就是我最终为我的project.clj 文件编写的内容:

(defproject game-backend "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :main game-backend.core
  :dependencies [
                 [org.clojure/clojure "1.8.0"]
                 [javax.xml.bind/jaxb-api "2.2.12"]
                 ])
Run Code Online (Sandbox Code Playgroud)

这是 core.clj 文件中的 ns 宏调用:

(ns game-backend.core
  (:require [clojure.java.io])
  (:import
   (java.security DigestInputStream)
   (java.io FileInputStream)
   (javax.xml.bind DataTypeConverter)
  )
)
Run Code Online (Sandbox Code Playgroud)

当我 tun 时lein run,出现以下错误(在某个时间点下载了一个包):Exception in thread "main" java.lang.ClassNotFoundException: javax.xml.bind.DataTypeConverter, compiling:(game_backend/core.clj:1:1)

我(我不知道我做错了多少步骤(全部?)。您能告诉我应该如何做吗?

Sco*_*ott 7

尝试使用小写“t” DatatypeConverter

(ns game-backend.core
  (:require [clojure.java.io])
  (:import
   (java.security DigestInputStream)
   (java.io FileInputStream)
   (javax.xml.bind DatatypeConverter)
  )
)
Run Code Online (Sandbox Code Playgroud)