确定Clojure Jar路径

oct*_*bus 7 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
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艺术表现.