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

sig*_*ker 112 java build clojure maven leiningen

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

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

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

谢谢

Han*_*-J. 62

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

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

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

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...
Run Code Online (Sandbox Code Playgroud)

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

:resource-paths ["/tmp/SiebelJars/*"]
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于uberjar,因为uberjar会在jar中添加依赖项jar,而不是添加依赖项类文件. (7认同)
  • 这是我到目前为止看到的最佳答案.本地mvn安装似乎不再适用于我. (2认同)

Jan*_*sen 48

  1. 在项目中创建一个目录:

    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(自复制后更改)

  • 对于较新的版本,您可能希望使用mvn deploy:deploy-file而不是install:install-file并指定-Durl = file:repo而不是-DlocalRepositoryPath = repo.在projects.clj中,您可以使用:: repositories {"local""file:maven_repository"}请参阅:https://gist.github.com/stuartsierra/3062743(我编辑了问题,但仍需要批准) (2认同)

Mic*_*zyk 36

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

随着形势变得更加复杂 - 有涉及私人罐的数量较多,它们进化,你需要采取一些版本的信息对他们的考虑 - 创建私有Maven的回购可能是更合适的亚瑟的想法.


(人力资源表示Leiningen特定部分的分界点以下......继续对一般的构建/依赖管理工具的故事Clojure中的土地,包括一些链接,我觉得能来在你的处境非常方便的信息.)

此外,到目前为止,关于哪个是Clojure的最佳构建工具的问题还没有达成普遍共识,而Leiningen虽然获得了大家的关注,但也在不断获得领域特征和润色 - 特别是,它尚未完成.以下是Pragmatic Bookshelf的"Programming Clojure"的作者Stuart Halloway的引用:"我的2c:Leiningen是重要的一步,但仍有很多工作要做." 对于完整的发布和一个非常有趣的讨论:在Clojure空间中构建工具等,请参阅Leiningen,Clojure和图书馆:我缺少什么?Clojure Google小组的主题.许多参与者特别提到需要将本地依赖项包含在本地或其他任何存储库中,并详细说明他们为此类方案提出的解决方案.也许你可以看到那里有什么东西可以解决你现在的问题/将来可能解决它,当功能集成熟时?

无论如何,Leiningen可能实际上还没有为一些复杂的场景准备好故事.如果您认为这可能适用于您的情况(我的意思是在您考虑私人回购的想法之后),这里有一些链接到基于maven的替代品,取自上面提到的线程:polyglot maven,clojure-maven-plugin ; 这篇博文旨在对试图与Clojure使用maven的人有用.我记得,Meikel Brandmeyer(也所以在他的kotarak的在线处理)使用摇篮(一个Groovy构建系统)用的插件,以适应Clojure的所谓Clojuresque; 我从来没有尝试过自己,因为不知道关于Groovy的第一件事情,但他声称用它运行一个非常漂亮的建筑行为,我相信它有没有关系行家-这是在其本身加分对于我们中的一些人 :-)

  • 从Leiningen v2开始,lib /目录功能已被删除.请参阅:https://github.com/technomancy/leiningen/wiki/Repeatability#free-floating-jars (8认同)
  • 回复:"关于哪个是Clojure最好的构建工具的问题没有普遍的一致意见"......截至今天,Leiningen似乎现在已成为逃避标准.2013年调查结果:https://lein-survey-2013.herokuapp.com/results (2认同)

小智 30

我发现lein pom; lein jar; lein install在开发库时效果很好.

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


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


这允许像任何其他库那样调用库 :dependencies [[project-name "version"]]

  • 与其他解决方案相比,这是如此简单,它的工作原理!无需安装maven.谢谢. (3认同)
  • 您只需要执行“ lein安装”即可。它将为您构建罐子和pom。 (2认同)

Art*_*ldt 14

我相信"正确"的方法是创建一个私有Maven存储库,以便您可以将jar存储在一个位置,所有分支等都将获取更改.对于你的所作所为,这可能有点过头了.我很好奇这些是否更容易.

  • 谢谢,我会调查一下.虽然我不得不说maven在我心中罢工.如果您知道任何简单的分步示例,请指出.为什么java世界中的构建如此复杂? (5认同)
  • 对不起,会有同情帮助吗? (5认同)

Sha*_*mar 9

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