我想有一种方法,'mvn install'将文件放在我的源(checkout)根目录下的存储库文件夹中,同时使用来自〜/ .m2/repository的第三方依赖项.
所以在'mvn install'之后,布局是:
/work/project/ repository com/example/foo-1.0.jar com/example/bar-1.0.jar foo src/main/java bar src/main/java ~/.m2/repository log4j/log4j/1.2/log4j-1.2.jar
(特别是/ work/project/repository不包含log4j)
在本质上,我正在寻找一种创建引用其他存储库的复合存储库的方法
我的目的是能够对同一个源进行多次检出并在每个检查上使用"install"在本地存储库中相互覆盖.多次检查可能是因为在cvs/svn中的不同分支上工作,但在我的情况下,这是由于在git中克隆主分支(在git中,每个克隆就像一个分支).我不喜欢每次结账时使用特殊版本/分类器或每次切换时重新安装(重建)所有内容的替代方案.
Maven可以搜索多个存储库(本地,远程,"假"远程)来解决依赖关系,但是只有一个本地存储库可以在其中安装工件install
.将工件安装到特定位置并维护此列表而不破坏任何东西将是一个真正的噩梦,这不会起作用,您不想这样做.
但是,TBH,我不明白这一点.那么,你为什么要这样做呢?可能有替代的和更简单的解决方案,例如在本地存储库中安装工件,然后在项目根目录下复制它们.为什么这不起作用?我真的很想知道最后的意图.
更新:阅读了初始问题的更新后,我能想到的唯一解决方案(假设您不想使用不同的版本/标签)将使用两个本地存储库并在它们之间切换(虽然非常容易出错) ).
为此,请使用不同的用户帐户(因为默认情况下本地存储库是用户特定的).
或者~/.m2/settings.xml
每次要切换时更新:
${user.home}/.m2/repository ...
或者使用另一个选项settings.xml
并指向它--settings
:
mvn install --settings /path/to/alternate/settings.xml
或者使用以下-Dmaven.repo.local
选项在命令行上指定备用位置:
mvn -Dmaven.repo.local=/path/to/repo
正如我所说,这些解决方案都容易出错,并且没有一个非常令人满意.即使您可能有很好的理由并行处理多个分支,您的用例(不是重建所有内容)也不常见.在这里,使用不同的用户帐户可能是更糟糕的解决方案IMO.