确定Clojure Jar路径

时间:2012-03-14 17:56:59

标签: clojure leiningen

这个问题的关键是要清除对Clojure project.clj依赖关系的混淆以及如何指定本地依赖关系。

我在树上有一堆Clojure lein项目

./projects/clojure/bene-csv # A csv parsing library
./projects/clojure/bene-cmp # A main program that depends on bene-csv

我正在编辑bene-cmp的project.clj文件。我想依赖 ./projects/clojure/bene-csv/bene-csv-1.0.0-SN.jar。

我是否使用简单的目录表示法来指定路径或其他内容

谢谢。

编辑:

我可以在bene-csv项目目录中输入lein install,并在bene-cmp项目目录的project.clj文件中使用这些project.clj条目,在项目中包含bene-csv:

(defproject bene-cmp "1.0.0-SN"
  :description "This is the main benetrak/GIC comparison program."
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [clojure-csv/clojure-csv "1.3.2"]
                 [bene-csv "1.0.0-SN"]])

然而,我仍在试图弄清楚路径是什么,并且会欣赏任何指针或帮助。谢谢。

1 个答案:

答案 0 :(得分:13)

Leinigen使用maven依赖关系管理,因此所有依赖关系都安装在

${HOME}/.m2/repository/${groupId-as-path}/${artifactId}/$[version}/${artifactId}-${version}.jar

[org.clojure/clojure "1.3.0"] groupId为org.clojure,其中artifactId为clojure,版本为1.3.0。 groupIds将转换为路径,因此{1}}的groupId的路径为org.clojure

在pom.xml中指定的maven依赖项中,它看起来像:

org/clojure

注意 - 如果未指定groupId,则leiningen对groupId和artifactId使用相同的值。

使用maven依赖关系管理的好处是它可以为您处理传递依赖关系,即。如果你指定一个依赖的东西,你会得到它所依赖的所有东西以及那些依赖的东西等等。

因此,要依赖本地项目,正确的方法是在本地存储库中安装本地项目。

为了节省您在开发阶段无休止地更改版本,maven支持SNAPSHOT依赖项,从而将一些额外信息附加到版本(基本上是日期时间)并且maven知道,对于说1.3.1-SNAPSHOT它应该看起来获取该快照的最新版本。这是由{version} -SNAPSHOT的命名约定触发的。

您可以在maven中使用硬编码路径指定系统依赖性,但通常这是不好的做法 - 它通常用于与平台相关的事物,即可能具有本机库组件。

默认搜索maven中央存储库,leinigen添加the clojars repository,作为clojure jar的核心仓库。

leinigen使用这些东西并构建一个引用本地maven存储库中的jar的类路径。

请注意,您可以使用<project> ... <dependencies> <dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.3.0</version> </dependency> </dependencies> ... </project> 从leinigen项目生成pom.xml。然后你可以从中驱动maven。一个有用的功能是

lein pom

给出了所有依赖关系的ascii艺术表现。