我们有一些 3rd-party jars 签入到我们的项目中。我们想将它们添加到类路径中。而已。我们不想建立一个本地的 maven repo(因为这会破坏我们的“check out and run”理念)。每个开发人员都必须建立自己的 Maven 存储库,与项目不同。
有没有办法做到这一点或者是这样吗?我见过的大多数答案都说要设置一个本地 maven,我们不希望或只需要将 jar 添加到类路径中。
您将需要设置一个本地 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/Desktop
isfile:///Users/user1/Desktop
和项目中的本地目录myrepo
is file:myrepo
。
我想详细说明@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}]]
这将防止在运行脚本时显示存储库密码提示。
这个问题已经在这里回答了。
maven
这确实是可能的,但是存在依赖管理是有原因的。如果您有许多依赖项更改版本,则建议使用创建 repo 的方法。