繁体   English   中英

在Clojure中导入Java库,它如何工作?

[英]importing java lib in clojure, how does it work?

我正在尝试构建我的第一个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)

我(不知道我做错了多少步骤(所有步骤?)。能否让我知道应该怎么做?

尝试使用小写的' t'DatatypeConverter

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

看一下您的Maven存储库(.m2目录)。 您将可以在其中找到jar文件。 然后查看该jar中的.class文件。

DatatypeConverter.class

这是发现您应该使用小写字母“ t”的一种方法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM