Using 3rd party java libraries, like com.jcraft.jsch, with clojure

你离开我真会死。 提交于 2020-01-22 19:39:06

问题


I'm experimenting with clojure and am trying to get a feel for using 3rd party libraries. I've been able to download some source, bundle it into a jar file with leiningen, put it in my classpath and (use 'lib.etc) in my script. I've also played around with the objects in java.lang.*.

I haven't had any success with 3rd party java, though.

$ java -cp clojure.jar:clojure-contrib.jar:com.jcraft.jsch_0.1.31.jar clojure.main
Clojure 1.1.0
user=> (require 'com.jcraft.jsch)
java.io.FileNotFoundException: Could not locate com/jcraft/jsch__init.class or com/jcraft/jsch.clj on classpath:  (NO_SOURCE_FILE:0)

$ jar tf com.jcraft.jsch_0.1.31.jar | egrep "(init|clj)"
$

It looks like an __init.class or .clj file must be created. Is this true, or is there some alternative way that pure java classes are supposed to be loaded?


回答1:


For java classes use import:

(import java.util.ArrayList)

;// or use a prefix for multiple classes:
(import [java.util ArrayList Collection])

;// or preferably in the ns declaration:
(ns my.lib
  [:import [java.util ArrayList Collection]])

user=> (def al (ArrayList.))
#'user/al
user=> (.add al "hi")
true
user=> (.size al)
1

Note the package and class names do not need to be quoted since import is a macro.

Also there is no equivalent to import java.util.*; You need to specify which classes you want to import.




回答2:


Try using import for non-clojure stuff.



来源:https://stackoverflow.com/questions/3327176/using-3rd-party-java-libraries-like-com-jcraft-jsch-with-clojure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!