这个问题的关键是要清除对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"]])
然而,我仍在试图弄清楚路径是什么,并且会欣赏任何指针或帮助。谢谢。
答案 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艺术表现。