Answers:
您可以将您的私人罐子放进lib/
去,出于lein swank
诸如此类的目的,它们会放在类路径中;这似乎确实使使用依赖项管理工具的意义大打折扣,尽管如果您实际上不希望管理那些依赖项,则可以将Leiningen视为“开放源代码依赖项管理工具”,并且可能要当心lein clean
。
随着情况变得更加复杂-涉及到更多的私有jar,它们在发展,您需要考虑一些版本信息-Arthur创建私有Maven回购的想法可能更合适。
(HR表示特定于Leiningen的零件分界点...继续下面以获取Clojure领域中一般的构建/依赖管理工具故事的信息,包括一些我认为可能对您有用的链接。)
此外,到目前为止,关于哪一个是Clojure的最佳构建工具这一问题尚未达成共识,而Leiningen在赢得广泛关注的同时,也在不断地在功能和抛光方面获得收益-特别是,这意味着尚未完成。这是语用书架的“ Programming Clojure”一书的作者Stuart Halloway的话:“我的2c:Leiningen是重要的一步,但仍有很多工作要做。” 有关完整的发布和非常有趣的讨论,请参见Leiningen,Clojure和库:在Clojure空间中构建工具等,我想念的是什么?Clojure Google网上论坛上的主题。许多参与者特别提到需要使本地依赖项不包含在任何存储库中,无论是本地存储库还是其他存储库,并详细说明他们针对此类情况提出的解决方案。也许您可以看到那里是否有什么现在可以解决您的问题/将来在功能集成熟时可以解决?
无论如何,Leiningen实际上可能还没有为某些复杂情况准备好故事。如果您认为这对您的情况是正确的(并且我的意思是在考虑了私有回购想法之后),那么下面是一些指向上述线程中基于maven的替代方法的链接:polyglot maven,clojure-maven-plugin;此博客发布旨在对试图与Clojure一起使用Maven的人有用。我记得,梅克尔·布兰德迈尔(Meikel Brandmeyer)也在Gradle(一种Groovy构建系统)的支持下使用Gradle(一种Groovy构建系统)来容纳名为Clojuresque的Clojure。我从来没有亲自尝试过,因为不了解Groovy的第一件事,但是他声称要与它做一个非常好的建筑行为,我相信这与Maven无关-这本身就是一个优点。对于我们中的一些人。:-)
只需在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"])
然后从lein repl我可以创建Siebel Data Bean实例,例如
(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...
如果您有较新的Java版本,则当然可以在路径说明中使用通配符,如下所示:
:resource-paths ["/tmp/SiebelJars/*"]
在项目中创建一个目录:
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
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将被检入项目中,而不是从Internet下载。
原始来源:将本地JAR与Leiningen结合使用(自复制以来已更改)
我发现lein pom; lein jar; lein install
在开发库时效果很好。
在正在开发的库中执行此操作,需要它的应用程序将使用它而无需任何:repositories
foo。
或者,lein do pom, jar, install
稍微简洁一些。
这样可以像调用其他库一样调用库 :dependencies [[project-name "version"]]
:dependencies [[project-name "version"]]
lein install
。它将为您构建罐子和pom。
我相信“正确”的方法是创建一个私有的Maven存储库,以便您可以将jars存储在一个位置,并且所有分支等都将接收更改。这可能对您的所作所为过大。我很好奇这些方法是否更简单。
您可能想使用插件lein-localrepo
:https : //github.com/kumarshantanu/lein-localrepo
Phil的最新开发s3-wagon-private
成果是Leiningen的Phil 插件:https://github.com/technomancy/s3-wagon-private
这应该允许您将工件发布到私有远程仓库中。
这些解决方案都无法解决我的问题。相反,我已经安装了本地存储库,并使用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"})
希望能帮助到你。
也许看看这个先前的答案,我提供了逐步的说明,以设置file://
您可以在其中安装jar 的项目本地存储库(通过访问)。
尝试我的解决方案如何构建具有依赖性的jar文件 http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
最好的选择是设置一个私有JFrog / Nexus工件,然后在其中部署快照/发行版,然后将该工件作为存储库添加到project.clj中。
其他更简单的方法是
静态HTTP最简单的私有存储库是一个Web服务器,它指向充满静态文件的目录。如果目录在运行Leiningen的计算机本地,则可以在:repositories中使用file:/// URL进行部署。
SCP 如果您已经使用SSH公钥设置了服务器,则scp传输是发布和使用私有依赖项的简单方法。将以下内容放入defproject中:
:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]
然后将以下内容放在defproject之外:
(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 []))))
如果您设置了nginx或类似的东西以通过HTTP为存储库目录服务,也可以使用scp传输将其部署到存储库并通过http进行使用。
注意:不再支持部署到Clojars的SCP
原始资源在这里https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md