Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 管理类路径的最简单方法?_Java_Configuration_Clojure_Classpath - Fatal编程技术网

Java 管理类路径的最简单方法?

Java 管理类路径的最简单方法?,java,configuration,clojure,classpath,Java,Configuration,Clojure,Classpath,我开始使用Clojure,我的Java经验非常有限。我来自Ruby和OO的动态世界,所以功能方面非常有趣 无论如何,当我发现库和各种可用的工具(以及实用Clojure书籍的教程文件)时,一切通常都需要将文件放置在类路径中,以便Clojure查看库以供使用 有好的类路径实践吗?我是否希望只有一个包含我所需文件的外部库的类路径,或者我是否可以将我所需的任何库或文件扔到目录中,并简单地将其定义为我的类路径,只需要所需的 如果有帮助的话,我是OSX和Emacs用户(使用slime和swank cloju

我开始使用Clojure,我的Java经验非常有限。我来自Ruby和OO的动态世界,所以功能方面非常有趣

无论如何,当我发现库和各种可用的工具(以及实用Clojure书籍的教程文件)时,一切通常都需要将文件放置在类路径中,以便Clojure查看库以供使用

有好的类路径实践吗?我是否希望只有一个包含我所需文件的外部库的类路径,或者我是否可以将我所需的任何库或文件扔到目录中,并简单地将其定义为我的类路径,只需要所需的


如果有帮助的话,我是OSX和Emacs用户(使用slime和swank clojure)。

我们使用clojure,并使用许多基础设施工具,特别是Eclipse(IDE)()和maven()。maven管理库和jar依赖项,因此如果您有很多库和jar依赖项,并且它们可能会增长,那么就开始使用maven

在回答您最初的问题时,您可以将JAR放在一个目录中,并且每次运行时都可以按名称访问它们。但是你会从这些工具中受益

如果您只是在探索,那么Eclipse可能会毫不费力地管理您的jar文件。您可以根据需要通过生成路径->配置生成路径选项将这些添加到项目中

随着工作的进行,您可能希望将其拆分为Eclipse支持的项目,以便将您的(或其他项目)添加到构建路径中

如果使用外部Clojure库,请查看它们是否已打包为maven项目(它们将有一个pom.xml文件)。POM将给出依赖项列表。
#

就我个人而言,我正在使用Phil Hagelberg的
clojure项目
elisp函数的变体,请参阅clojure组的源代码。它为您将要处理的项目适当地设置类路径,然后启动SLIME。(编辑:您需要将分配给
swank clojure jar path
的值更改为指向
clojure.jar
。我使用
(扩展文件名“~/.clojure/clojure.jar”)
作为默认值。)


要回答这样一个问题:始终将所有东西都放在类路径上,而不是只投入所需的东西:据我所知,如果采用第一种方法,实际上没有什么东西会中断(我知道我这样做是出于实验目的),但显然,事情可能会与第一种方法中断(请参见下面的cjstehno评论)在一个合适的项目中,我发现第二个更干净。如果只是告诉leiningen(或maven)关于LIB的情况,那么在某个时候就有必要确定正在使用什么LIB(以及它们的哪些版本)——为什么不在运行过程中对其进行跟踪呢。

Java通常的类路径做法是只将项目所需的jar文件放入此项目类路径中,这意味着对于不同的项目可能有不同的类路径。这通常由IDE作为其项目属性的一部分进行管理

由于您使用的是Emacs,因此可能没有或使用类似于项目的东西,因此为所有与clojure相关的东西设置和使用一个全局类路径可能更方便,甚至可以简单地将所有需要的jar文件放在java安装的java2se/jre/lib/ext目录中

在类路径中有不需要的jar文件可能会引起两个主要问题:1。它对JVM和2的启动时间有轻微的负面影响。确保同一类路径中没有不同版本的类(即不同jar文件中具有相同包和名称的不同类)变得更加困难。

因为Java SE 1.6(或JDK 1.6)可以通过通配符包含类路径条目。如果类文件位于.\bin中,而库jar文件位于.\lib中,那么在Windows上,您可以像这样定义类路径:

set CLASSPATH=bin;lib\*;
这将允许您将jar文件添加到。\lib目录中,它们将自动添加到JRE新实例的类路径中

有关详细信息,请参阅此链接:


在JDK1.6之前,您必须将每个jar文件分别添加到类路径中。

我建议使用leiningen和lein swank来管理此问题。您可以在目录中启动一个REPL并从Emacs连接到它。

我刚刚发现了一个我需要试一试的地方:


(setq-swank-clojure-extra-classpath(list)/class/path/1”“/class/path/2”“/class/path/3”“等)
clojure-contrib/launchers/bash/clj-env-dir有一个有趣的属性,您可以将它指向一个目录,它基本上包含其中的任何内容。在过去,我有一个~/classpath目录,我可以将任何jar转储到其中,并链接到任何常用的目录,它工作得非常好。非常简单的转储和使用方法。现在我倾向于使用Maven-clojure-Maven插件,这也很好用,不过当你只是想胡思乱想一些想法时可能会有点乏味。

实际上,如果你把所有东西都放在类路径上,你可能会遇到问题,尤其是类加载器冲突或错误的类加载。通常最好在类路径上只包含特定应用程序所需的内容。哦,我明白了。显然我到目前为止很幸运,但我会在将来记住这一点。谢谢你的评论,我将进行相应的编辑。哦,我喜欢菲尔的clojure项目实施,我想我会运行一下,稍后再报告。谢谢嗯,我可以继续找一个项目,但slime一直在努力寻找一个连接,它只是挂起了。我必须解决这个问题,但我喜欢它的发展方向。谢谢当然可以。:-)您需要更改
swank-clojure-jar路径
以指向
clojure.jar
,使其正常工作;发帖时忘记了。将相应地进行编辑。我认为有了这个解决方案,整个事情应该