Java leiningen-如何为本地JAR添加依赖项?
我想使用leiningen来构建和开发我的clojure项目。有没有办法修改project.clj,让它从本地目录中选取一些JAR 我有一些无法上传到公共回购的专有JAR 另外,leiningen可以用来维护clojure项目的“lib”目录吗?如果我的许多clojure项目共享相同的JAR,我不想为每个JAR维护单独的副本Java leiningen-如何为本地JAR添加依赖项?,java,build,clojure,maven,leiningen,Java,Build,Clojure,Maven,Leiningen,我想使用leiningen来构建和开发我的clojure项目。有没有办法修改project.clj,让它从本地目录中选取一些JAR 我有一些无法上传到公共回购的专有JAR 另外,leiningen可以用来维护clojure项目的“lib”目录吗?如果我的许多clojure项目共享相同的JAR,我不想为每个JAR维护单独的副本 谢谢我认为“正确”的方法是将罐子存储在一个位置,所有分支机构等都将接收更改。对于你所做的,这可能是过分的。我很好奇这是否是一种更简单的方法。你可以把你的私人罐子放在lib/
谢谢我认为“正确”的方法是将罐子存储在一个位置,所有分支机构等都将接收更改。对于你所做的,这可能是过分的。我很好奇这是否是一种更简单的方法。你可以把你的私人罐子放在
lib/
中,为了lein swank
之类的目的,它们会在类路径上;这似乎不符合使用依赖项管理工具的目的,但是如果您实际上不希望管理这些依赖项,您可以将Leiningen视为“开源依赖项管理工具”,并且可能会小心使用lein clean
随着情况变得越来越复杂——涉及的私有JAR数量越来越多,它们也在不断发展,您需要考虑它们的一些版本控制信息——Arthur创建私有Maven回购的想法可能更合适
(HR表示Leiningen特定的零件分界点……请继续下面的内容,了解Clojure land中的一般构建/依赖关系管理工具故事,包括一些我认为在您的情况下非常有用的链接。) 此外,到目前为止,对于Clojure的最佳构建工具是哪一个还没有达成普遍的一致,Leiningen在获得思维分享的同时,也在不断地获得特性和修饰方面的优势——这意味着它还没有完成。这里引用实用书架《Clojure编程》一书作者斯图尔特·哈洛韦的一句话:“我的2c:Leiningen是一个重要的步骤,但仍有很多事情要做。”有关Clojure空间中关于构建工具等的完整帖子和非常有趣的讨论,请参阅Clojure Google组的帖子。许多参与者特别提到需要在任何存储库(本地或其他存储库)中不包含本地依赖项,并详细说明他们为此类场景提出的解决方案。也许你可以看看,当功能集成熟时,是否有什么东西可以解决你的问题
无论如何,对于一些复杂的场景,莱宁根可能还没有准备好一个好的故事。如果你觉得这可能是你的真实情况(我的意思是在你考虑了私人回购计划)之后,这里有一些基于Maven的替代品从上面提到的线程的链接:旨在对尝试将maven与Clojure结合使用的人有用。我记得,Meikel Brandmeyer(在他的在线网站kotarak下也是如此)使用Gradle(Groovy构建系统)和一个名为Clojuresque的插件来容纳Clojure;我自己从来没有试过,因为我对Groovy一无所知,但他声称用它进行了一次非常好的建筑表演,我相信这与maven无关——这对我们中的一些人来说是一件好事。:-) 也许可以看看这个,我提供了一步一步的说明,以设置项目本地的存储库(通过
文件://
访问),您可以在其中安装JAR。最近的一个开发是Phil的s3 Vang private
Leiningen插件:
这应该允许您将工件发布到私有远程repo
mkdir maven_存储库
jaad-0.8.3.jar
文件添加到maven中
存储库:
mvn部署:部署文件-Dfile=jaad-0.8.3.jar-DartifactId=jaad-Dversion=0.8.3-DgroupId=jaad-dpackage=jar-Durl=file:maven_存储库
project.clj
:存储库{“本地”文件:maven_存储库}
lein deps
应该可以工作了:
$lein deps
从本地下载:jaad/jaad/0.8.3/jaad-0.8.3.pom
从本地传输0K
[警告]***校验和失败-检索jaad/jaad/0.8.3/jaad-0.8.3.pom的校验和文件时出错-忽略
原始来源:(复制后更改)您可能喜欢使用插件
leinlocalrepo
:我发现leinpom;莱因罐;lein install在开发库时运行良好
在正在开发的库中执行此操作,需要它的应用程序将使用它,而不需要任何:存储库foo
或者,lein do pom,jar,install
稍微简洁一些
这允许像调用任何其他:依赖项[[project name“version”]]
一样调用库,只需在project.clj文件中使用:资源路径即可。我使用它,例如连接到Siebel服务器。刚刚在我的项目目录中创建了一个resources目录,并在其中复制了jar文件。当然,您可以使用更通用的目录:
(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])
然后,我可以从leinrepl创建Siebel数据Bean实例,例如
(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...
如果您有一个较新的Java版本,您当然可以在路径规范中使用通配符,如下所示,用于更通用的目录:
:resource-paths ["/tmp/SiebelJars/*"]
尝试我的解决方案如何构建具有依赖关系的jar文件
这些解决方案中没有一个对我有效。相反,我安装了一个本地存储库,使用maven在本地repo中安装jar文件,并将本地repo添加到我的project.clj中
指挥林
mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
-Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
-Durl=file:repo
(defproject foo "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.4.0"]
[local/bar "1.0.0"]]
:repositories {"project" "file:repo"})
:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]
(cemerick.pomegranate.aether/register-wagon-factory!
"scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
(clojure.lang.Reflector/invokeConstructor c (into-array []))))