我开始使用Clojure了,我的Java经验非常有限。我来自Ruby和OO的动态世界,因此功能方面非常有趣!
无论如何,当我发现库和各种使用工具(以及Pragmatic Clojure Book的教程文件)时,所有内容通常都要求将文件放在CLASSPATH中,以便Clojure可以查看库以供使用。
有没有好的CLASSPATH练习?我是否只想要一个只有我需要的外部文件库的CLASSPATH,或者我可以继续在目录中抛出我需要的任何库或文件,只需将其定义为我的CLASSPATH并且只需要所需的东西?
如果有帮助,我是OSX和Emacs用户(使用slime和swank-clojure)。
答案 0 :(得分:5)
我建议使用leiningen和lein-swank来管理它。您可以在目录中启动REPL并从Emacs连接到它。
答案 1 :(得分:2)
就个人而言,我正在使用Phil Hagelberg的clojure-project
elisp函数的变体,请参阅this post中Clojure组的来源。它为您正在处理的项目设置适当的类路径,然后启动SLIME。 (编辑:您需要更改分配给swank-clojure-jar-path
的值以指向clojure.jar
。我使用(expand-file-name "~/.clojure/clojure.jar")
作为默认值。)
要回答关于在类路径上始终拥有所有内容的问题,而不仅仅是投入所需的内容:据我所知,如果采取第一种方法,任何事情都不会破坏(我知道我这样做是为了实验目的),但显然事情可能会破坏第一种方法(见下面cjstehno的评论),在一个合适的项目中,我发现第二种方法更清洁。在某些时候,有必要确定正在使用哪些库(以及它们的哪些版本),如果只是为了告诉leiningen(或maven),为什么不随时关注它。
答案 2 :(得分:1)
我们正在使用Clojure并使用许多基础结构工具,尤其是Eclipse(IDE)(http://en.wikipedia.org/wiki/Eclipse_%28software%29)和maven(http://en.wikipedia.org/wiki/Apache_Maven)。 maven管理库和jar依赖项,所以如果你有很多这样的东西,它们很可能会开始使用maven。
在回答原始问题时,您可以将您的罐子放在一个目录中,每次运行时都可以通过名称访问它们。但是你会从这些工具中受益......
如果您正在探索,那么Eclipse可能会毫不费力地管理您的jar文件。您可以根据需要通过构建路径将这些添加到项目中 - >配置构建路径选项。
随着您的工作进展,您可能希望将其拆分为Eclipse支持的项目,以便您可以将您的(或其他项目)添加到构建路径中。
如果您使用外部Clojure库,请查看它们是否已打包为maven项目(它们将具有pom.xml文件)。 POM将提供依赖项列表。 #
答案 3 :(得分:1)
Java的常见CLASSPATH实践是将项目所需的jar文件放入此项目类路径中,这意味着为不同的项目设置可能不同的类路径。这通常由IDE作为其项目属性的一部分进行管理。
由于您正在使用Emacs,因此可能没有或使用类似项目的东西,因此您可能更方便为所有与clojure相关的东西设置和使用单个全局类路径,或者甚至简单地将所有需要将jar文件放入java安装的java2se / jre / lib / ext目录中。
在类路径中放置不需要的jar文件可能产生的两个主要问题是:1。它对JVM的启动时间产生轻微的负面影响,2。确保你是更加困难没有在同一个类路径中具有不同版本的类(即在不同的jar文件中具有相同包和名称的不同类)。
答案 4 :(得分:1)
从Java SE 1.6(或JDK 1.6)开始,您可以通过通配符包含类路径条目。如果您的类文件位于。\ bin中,并且您的库jar文件位于。\ lib中,那么在Windows上您可以像这样定义类路径:
set CLASSPATH=bin;lib\*;
这将允许您将jar文件添加到。\ lib目录中,它们将自动添加到JRE的新实例的类路径中。
有关详细信息,请参阅此链接:Setting the class path
在JDK 1.6之前,你必须将每个jar文件分别添加到ClassPath中。
答案 5 :(得分:0)
我刚刚发现了这个我需要注意的一点:
(setq swank-clojure-extra-classpaths (list "/class/path/1" "/class/path/2" "/class/path/3" "etc"))
答案 6 :(得分:0)
clojure-contrib / launchers / bash / clj-env-dir有一个有趣的属性,你可以将它指向一个目录,它基本上包含任何内容。在过去,我有一个〜/ classpath目录,我将任何jar转储到并链接任何常用的目录,它工作得很好。非常简单的转储和使用方式。现在我倾向于使用Maven clojure-maven-plugin并且效果也很好,但是当你想要捣乱一些想法时可能会有点乏味。