leiningen - 如何为本地jar添加依赖项?

问题

我想用leiningen建立和开发我的clojure项目。有没有办法修改project.clj告诉它从本地目录中挑选一些罐子?

我有一些专有的罐子无法上传到公共回购。

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

谢谢


#1 热门回答(57 赞)

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

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

然后从thelein replI可以创建Siebel数据Bean实例,例如

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

如果你有一个较新的Java版本,你当然可以在你的路径规范中使用通配符,这样更通用的目录:

:resource-paths ["/tmp/SiebelJars/*"]

#2 热门回答(44 赞)

  • 在项目中创建一个目录:mkdir maven_repository
  • 将本地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
  • 将以下内容添加到project.clj:repositories {"local""file:maven_repository"}
  • 现在一个普通的lein deps应该工作:$ lein deps下载:来自本地的jaad / jaad / 0.8.3 / jaad-0.8.3.pom从本地转移0K [警告]*** CHECKSUM FAILED - 错误检索jaad的校验和文件/jaad/0.8.3/jaad-0.8.3.pom - 忽略

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

原始来源:Using local JAR's with Leiningen(自复制后更改)


#3 热门回答(35 赞)

你可以将你的私人罐子放在lib/中,并且他们将在lein swank等目的的路径上;这似乎打败了使用依赖管理工具的重点,但如果你实际上并不想管理依赖关系,你可以将Leiningen视为"开源依赖管理工具",也许要小心lein clean

随着情况变得更加复杂 - 涉及的私人罐子数量越来越多,它们也在不断发展,你需要考虑一些版本信息--Arthur创建私有Maven回购的想法可能更合适。
(HR表示Leiningen特定的部分截止点...继续下面,了解有关Clojure土地中一般构建/依赖管理工具故事的信息,包括一些我认为在你的情况下可能非常方便的链接。)
此外,到目前为止,关于哪个是Clojure的最佳构建工具的问题还没有达成普遍共识,而Leiningen虽然获得了大家的关注,但也在不断获得特征和润色方面 - 特别是,它尚未完成。以下是来自Pragmatic Bookshelf的"Programming Clojure"的作者Stuart Halloway的引用:"我的2c:Leiningen是一个重要的步骤,但仍有很多工作要做。"有关完整发布和非常有趣的讨论:在Clojure空间中构建工具等,请参阅Clojure Google小组上的Leiningen, Clojure and libraries: what am I missing?thread。许多参与者特别提到需要在本地或其他任何存储库中包含本地依赖关系,并详细说明他们为此类方案提出的解决方案。或许你可以看到那里有什么东西可以解决你现在的问题/将来可能解决它,当功能集成熟时?

无论如何,Leiningen可能实际上并没有为一些复杂的场景准备好故事。如果你觉得这可能适用于你的情况(我的意思是在你考虑私人回购的想法之后),这里有一些基于maven的替代方案的链接取自上面提到的线程:polyglot maven,clojure-maven-plugin; this blog posting对于尝试的人有用与Clojure一起使用maven。我记得,Meikel Brandmeyer(也是他在kotarak的在线句柄上的SO)使用Gradle(一个Groovy构建系统)和一个插件来容纳Clojure,称为Clojuresque;我自己从未尝试过,因为不知道关于Groovy的第一件事,但他声称用它做了一个非常好的建筑行为,我相信它与maven无关 - 这本身就是一个优点。对于我们中的一些人:-)