leiningen – 如何添加本地jar子的依赖?

我想用leiningenbuild立和发展我的clojure项目。 有没有办法修改project.clj来告诉它从本地目录中select一些jar?

我有一些专有的jar子不能上传到公共仓库。

另外,leiningen可以用来维护clojure项目的“lib”目录吗? 如果我的一些clojure项目共享相同的jar子,我不想为每个jar子保留一个单独的副本。

谢谢

你可以把你的私人jar子放在lib/ ,为了lein swank之类的目的,他们会在classpath中; 这看起来似乎打破了使用依赖pipe理工具的一点,但是如果你实际上并不想要这些依赖pipe理的话,那么你可以把Leiningen当作“开源的依赖pipe理工具”来处理,也许要小心lein clean

随着情况变得越来越复杂 – 涉及的私人jar子数量也在不断增加,您需要考虑一些版本信息 – 亚瑟创build私有Maven回购的想法可能更为合适。


(人力资源部门表示Leiningen特定部分的截止点…下面继续介绍Clojure土地上一般的build立/依赖pipe理工具故事的信息,包括一些我认为在您的情况下可能非常方便的链接。)

此外,迄今为止,在Clojure的最佳构build工具问题上还没有普遍的一致意见,而Leiningen在获得思想共享的同时,也在不断地获得这些领域的特征和抛光,特别是它还没有完成。 以下是Pragmatic Bookshelf编程Clojure的作者Stuart Halloway的一句名言:“我的2c:Leiningen是重要的一步,但还有很多事情要做。 有关完整的发布和一个非常有趣的讨论:在Clojure空间中构build工具等,请参阅Leiningen,Clojure和库:我错过了什么? 在Clojure Google小组上讨论。 许多参与者特别提到需要在本地或其他地方没有任何存储库中包含本地依赖项,并详细阐述他们为这种情况提出的解决scheme。 也许你可以看看是否有什么可以解决你的问题现在/将来可以解决它,当function集成熟?

无论如何,Leiningen可能事实上并没有为一些复杂的场景准备好一个好故事。 如果你觉得这可能是你的情况(我的意思是考虑到私人回购的想法),这里有一些链接到基于Maven的替代scheme取自上述线程: polyglot maven , clojure-maven-plugin ; 这个博客文章旨在对试图与Clojure使用maven的人有用。 我记得,Meikel Brandmeyer(也是在他的在线kotarak句柄下)使用Gradle(一个Groovy构build系统)和一个插件来容纳称为Clojuresque的Clojure; 我从来没有尝试过,因为我不知道Groovy的第一件事情,但他声称用它做了一个非常好的构build行为,我相信这跟maven没有任何关系 – 这本身就是一个好东西对于我们中的一些人。 🙂

只需在你的project.clj文件中使用:resource-paths 。 我使用它,例如连接到Siebel服务器。 只是在我的项目目录中创build了一个资源目录,并将jar文件复制到那里。 但是,当然你可以使用更通用的目录:

 (defproject test-project "0.1.0-SNAPSHOT" :description "Blah blah blah" ... :resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"]) 

然后从lein repl我可以创buildSiebel数据Bean实例,例如

 (def sbl (com.siebel.data.SiebelDataBean.)) (.login sbl "siebelServer" "user" "password") ... 

如果你有一个更新的Java版本,你可以在你的path规范中使用通配符,如下所示:

 :resource-paths ["/tmp/SiebelJars/*"] 
  1. 在项目中创build一个目录:

    mkdir maven_repository

  2. 将本地jar添加到此存储库:

    例如,这个命令将jaad-0.8.3.jar文件添加到maven仓库:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. 将以下内容添加到project.clj

    :repositories {"local" "file:maven_repository"}

  4. 现在一个普通的lein deps应该工作:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

警告可以忽略,因为jar会被检入到项目中,而不是从网上下载。

原始来源: 在Leiningen中使用本地JAR (自复制以来已更改)

我发现lein pom; lein jar; lein install lein pom; lein jar; lein install lein pom; lein jar; lein install在开发库时运行良好。

在正在开发的库中执行此操作,并且您的应用程序将使用它,而不需要以下任何方式:repositories所需的:repositories


或者, lein do pom, jar, install稍微简洁一些。


这可以像调用其他库一样调用库:dependencies [[project-name "version"]]

我相信“正确”的方法是创build一个私人的Maven仓库,以便您可以将jar子存储在一个单一的位置,所有的分支机构等将采取变化。 这可能是你为什么做的矫枉过正 我很好奇,如果这是一个更简单的方法。

您可能喜欢使用插件lein-localrepo : https : //github.com/kumarshantanu/lein-localrepo

最近的一个发展是菲林的Leiningen的三轮s3-wagon-private插件: https : //github.com/technomancy/s3-wagon-private

这应该允许你发布工件到一个私人的远程仓库。

也许看看这个以前的答案 ,我提供了一步一步的说明,build立一个本地的项目库(通过file://访问),您可以在其中安装您的jar子。

这些解决scheme都没有奏效。 相反,我已经安装了一个本地仓库,并使用maven在本地仓库中安装jar文件,并将本地仓库添加到我的project.clj

在命令行中:

 mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \ -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \ -Durl=file:repo 

我写我的project.clj是这样的:

 (defproject foo "0.1.0-SNAPSHOT" :dependencies [[org.clojure/clojure "1.4.0"] [local/bar "1.0.0"]] :repositories {"project" "file:repo"}) 

希望能帮助到你。

[参考: https : //gist.github.com/stuartsierra/3062743 ]

试试我的解决scheme如何build立与依赖关系的jar文件http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html