16

我们有一些 3rd-party jars 签入到我们的项目中。我们想将它们添加到类路径中。而已。我们不想建立一个本地的 maven repo(因为这会破坏我们的“check out and run”理念)。每个开发人员都必须建立自己的 Maven 存储库,与项目不同。

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

4

3 回答 3

24

您将需要设置一个本地 Maven 存储库,但这可以是您项目目录中的一个简单目录,然后您可以将其签入源代码控制。(这将维持您的“签出并运行”政策)

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

在您的项目中创建一个目录,在本例中名为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格式为 URL。因此,/Users/user1/Desktopisfile:///Users/user1/Desktop和项目中的本地目录myrepois file:myrepo

于 2013-10-21T15:25:19.713 回答
7

我想详细说明@Jared314对我也有帮助的出色回答。

下面是一个脚本,它可以自动将多个 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

可以添加的 Leiningen 依赖项列表project.clj存储在dependencies.log.

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

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

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

于 2015-11-02T15:47:42.743 回答
0

这个问题已经在这里回答了。

maven这确实是可能的,但是存在依赖管理是有原因的。如果您有许多依赖项更改版本,则建议使用创建 repo 的方法。

于 2013-10-21T14:13:18.027 回答