Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java leiningen-如何为本地JAR添加依赖项?_Java_Build_Clojure_Maven_Leiningen - Fatal编程技术网

Java leiningen-如何为本地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/

我想使用leiningen来构建和开发我的clojure项目。有没有办法修改project.clj,让它从本地目录中选取一些JAR

我有一些无法上传到公共回购的专有JAR

另外,leiningen可以用来维护clojure项目的“lib”目录吗?如果我的许多clojure项目共享相同的JAR,我不想为每个JAR维护单独的副本


谢谢

我认为“正确”的方法是将罐子存储在一个位置,所有分支机构等都将接收更改。对于你所做的,这可能是过分的。我很好奇这是否是一种更简单的方法。

你可以把你的私人罐子放在
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_存储库

  • 将本地JAR添加到此存储库:

    例如,此命令将
    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的校验和文件时出错-忽略

  • 警告可以忽略,因为jar将被签入项目中,而不是从internet下载


    原始来源:(复制后更改)

    您可能喜欢使用插件
    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 []))))