Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Clojure REPL中需要jar文件?_Java_Clojure - Fatal编程技术网

Java 如何在Clojure REPL中需要jar文件?

Java 如何在Clojure REPL中需要jar文件?,java,clojure,Java,Clojure,很容易要求clojure提供一个包: user=> (require 'clojure.core) nil 但是我如何在Clojure中需要.jar文件呢 (我正在努力学习lein。Leiningen对大型项目而不是小型脚本很有用。因此,我想知道在Clojure脚本和回复中使用jar包的最佳方法是什么。)我不认为你可以。REPL必须使用类路径上的JAR启动。请查看库。虽然可以在库的帮助下在运行时将JAR添加到应用程序中,但非常不鼓励: 它从外部隐藏依赖项,最终用户不会知道他们需要它来运行

很容易
要求clojure提供一个包:

user=> (require 'clojure.core)
nil
但是我如何在Clojure中需要
.jar
文件呢


(我正在努力学习
lein
。Leiningen对大型项目而不是小型脚本很有用。因此,我想知道在Clojure脚本和回复中使用
jar
包的最佳方法是什么。)

我不认为你可以。REPL必须使用类路径上的JAR启动。

请查看库。

虽然可以在库的帮助下在运行时将JAR添加到应用程序中,但非常不鼓励:

  • 它从外部隐藏依赖项,最终用户不会知道他们需要它来运行代码
  • jar本身可以依赖于其他jar文件(因此会给最终用户带来解决问题的压力)
  • 我想我是在重复其他受访者的观点,但我想我应该补充几点来验证他们的建议

    事实上,lein2在封面下使用了石榴,只是为了在需要依赖项后不必重新启动REPL。它仅用于开发目的。

    您可以使用它

    答复:

    user=>(def cl (-> (Thread/currentThread) (.getContextClassLoader)))
    ;; need load dependicies before, using the same method
    user=>(-> cl (.addURL (java.net.URL. "file:///c:/Users/dev/m2/repository/cheshire/cheshire/5.3.1/cheshire-5.3.1.jar")))
    user=>(require '[cheshire.core :as json])
    

    因此,在Ubuntu 14.04上检查我的REPL的
    manclojure
    使我进入了
    -cp
    选项(它是
    -classpath
    的缩写):


    事实上,作为参考,我想分享一个使用
    jar
    库的示例。因为它可能对不熟悉Java(和所有机器)的人有用,但希望使用这个漂亮的lisp编写脚本/编写简短的漂亮的小程序,因此不需要leiningen

    例如:您希望解析一些包含CSV内容的文件,并以某种方式使用它

    • 文件系统上的文件使用标准的
      clojure.java.io
    • CSV内容由外部文件解析
    下载
    data.csv.jar
    以下内容:

    将其放在当前工作目录中,然后打开REPL,将路径添加到
    类路径中

    clojure -cp ./path/to/package.jar
    user=> (require `clojure.package)
    
    clojure -cp ./data.csv-0.1.4.jar
    Clojure 1.4.0
    user=> ; now you have it
    user=> (require '[clojure.data.csv :as csv])
    nil
    user=> 
    

    那么如何用JAR启动Clojure REPL呢?由于我在谷歌上搜索,我发现只有
    java
    命令有这个选项。Clojure中是否有替换项?您将jar作为依赖项添加到project.cljSo中,您的意思是lein是唯一的解决方案。@Alex Baranosky:您可以在运行时从REPL动态添加jar,就像您可以在运行时将jar动态添加到运行中的Java程序一样。然而,这可能比它的价值更麻烦:我建议改用Leiningen。但还是。。。这是可以做到的:我重用了(来自Clojure)一个Java项目的引导代码,该项目通过向类路径动态添加JAR来解决运行时的依赖关系,并且在REPL:)中运行良好。lein不是唯一的解决方案。但是,这对于Clojure来说是最简单的。您可能应该使用leinginen来设置类路径和依赖项。这应该可以解决99%的问题和烦恼。请看我是否必须做一些特殊的事情才能让lein2注意到新的依赖项?这取决于您如何定义“特殊的东西”:)您应该在或中找到依赖项并将其添加到project.clj。第一个示例显示:dependencies部分供您参考。