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

时间:2017-02-02 18:44:32

标签: 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"]
                 ])

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

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

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

我(我不知道我做错了多少步骤(所有这些?)。你能否告诉我应该如何做?

3 个答案:

答案 0 :(得分:3)

尝试小写't'DatatypeConverter

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

答案 1 :(得分:1)

查看您的maven存储库(.m2目录)。你将能够在那里找到jar文件。然后查看那个jar中的.class文件。

DatatypeConverter.class

这是找到你应该使用小写't'的一种方法。

答案 2 :(得分:0)

您还可以添加多个类的包:

(:import (java.io File Bits BufferedInputStream))