我如何使用与leiningen签到的罐子

时间:2013-10-21 13:44:15

标签: clojure leiningen

我们在我们的项目中签了一些第三方罐子。我们想将它们添加到类路径中。而已。我们不想建立一个本地的maven回购(因为这会破坏我们的'检查和运行'理念)。每个开发人员都必须建立自己的maven仓库,与项目不同。

有办法做到这一点还是这样?我见过的大多数答案都说要设置一个我们不想要或只需要在类路径中添加jar的本地maven。

3 个答案:

答案 0 :(得分:24)

您需要设置一个本地maven存储库,但这可以是项目目录中的一个简单目录,然后您可以检入源控件。 (这将保持您的'签出和运行政策)

从Leiningen 2.2.0开始,部署jar的功能内置了lein deploy任务。因此,该任务已从以前的版本中简化。

在项目中创建一个目录,在此示例中为myrepo。 (这个名字是任意的)

:repositories文件中添加project.clj条目,其中包含您创建的本地目录的路径。

:repositories [["localrepo1" "file:myrepo"]]

将自由浮动的jar部署到回购站。

lein deploy localrepo1 com.blueant/fancypants 1.0.1 fancypants.jar

并且正常地将您的依赖项添加到project.clj :dependencies向量中。

:dependencies [[com.blueant/fancypants "1.0.1"]]

部署任务将生成绑定到lein依赖关系解析所需的校验和和目录结构。您可以使用lein deps :tree命令验证您的jar是否已正确加载。

注意: :repositories中的文件路径格式化为网址。因此,/Users/user1/Desktopfile:///Users/user1/Desktop,项目中的本地目录myrepofile:myrepo

答案 1 :(得分:7)

我想详细说明帮助我的@Jared314's excellent answer

下面是一个脚本,可以自动将多个jar从本地lib文件夹添加到本地存储库:

#!/bin/sh
export LOCALREPO_USERNAME=
export LOCALREPO_PASSWORD=

for file in lib/*.jar
do
    name=$(basename "$file")
    basename=${name%.jar}

    echo "Deploying $basename"

    artifactId="local/$basename"
    lein deploy localrepo1 $artifactId 1.0 $file

    echo "[$artifactId \"1.0\"]" >> dependencies.log
done

可以添加到project.clj的Leiningen依赖关系列表存储在dependencies.log中。

在运行脚本之前,必须更新:repositories中的project.clj条目以允许从环境中读取存储库用户名和密码:

  :repositories [["localrepo1" {:url "file:myrepo"
                                :username :env/localrepo_username
                                :password :env/localrepo_password}]]

这将阻止在运行脚本时显示存储库密码提示。

答案 2 :(得分:0)

这个问题已经回答here

这确实是可能的,但是存在maven和依赖关系管理的原因。如果您有许多依赖项,那么更改版本会创建一个repo,这是推荐的方法。