这个问题的关键是要清除对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
Run Code Online (Sandbox Code Playgroud)
我在编辑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"]])
Run Code Online (Sandbox Code Playgroud)
但是,我仍在试图弄清楚路径是什么,并且会欣赏任何指针或帮助.谢谢.
sw1*_*1nn 13
Leinigen使用maven依赖管理,因此所有依赖项都安装在
${HOME}/.m2/repository/${groupId-as-path}/${artifactId}/$[version}/${artifactId}-${version}.jar
Run Code Online (Sandbox Code Playgroud)
对于[org.clojure/clojure "1.3.0"]groupId org.clojure,artifactId clojure和版本是1.3.0.groupIds被转换为路径,因此groupId的org.clojure路径为org/clojure.
在pom.xml中指定的maven依赖项中,它看起来像:
<project>
...
<dependencies>
<dependency>
<groupId>org.clojure</groupId>
<artifactId>clojure</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
...
</project>
Run Code Online (Sandbox Code Playgroud)
注 - 如果未指定groupId,则leiningen对groupId和artifactId使用相同的值.
使用maven依赖关系管理的好处是它可以为您处理传递依赖关系,即.如果你指定一个依赖的东西,你会得到它所依赖的所有东西以及那些东西依赖的所有东西等等.
因此,要依赖本地项目,正确的方法是在本地存储库中安装本地项目.
为了节省您在开发阶段无休止地更改版本,maven支持SNAPSHOT依赖项,其中一些额外信息附加到版本(基本上是日期时间),而且maven知道,对于说1.3.1-SNAPSHOT它应该寻找最新的该快照的版本.这是由{version} -SNAPSHOT的命名约定触发的.
您可以在maven中使用硬编码路径指定系统依赖性,但通常这是不好的做法 - 它通常用于与平台相关的事物,即可能具有本机库组件.
默认情况下,搜索maven中央存储库,并将leinigen添加到clojars存储库中,该存储库用作clojure jar的中央存储库.
leinigen在封面下使用这些东西并构建一个类路径,引用本地maven存储库中的jar.
请注意,您可以pom.xml使用leinigen项目生成a lein pom.然后你可以从中驱动maven.一个有用的功能是
mvn dependency:tree
Run Code Online (Sandbox Code Playgroud)
它给出了所有依赖关系的ascii艺术表现.
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |