我已经使用了maven一段时间以及开箱即用的设置,所以我明白它是什么,但我是maven设置中的新手。
我需要组织这样的工作流程:
我知道如何做到这一点:
我的问题是: 如何在文件系统上使用简单目录作为某些项目的代理存储库? 请告诉我如何实现这个想法或给我另一个想法来实现这样的工作流程。
我可以提交本地存储库,但存在一些限制:
我通过在repo url中编写“file:// testRespoDir”来测试本地目录以部署项目,但是我无法理解如何使这个目录代理项目的所有远程工件(项目不能使用本地仓库和只使用公共目录。
答案 0 :(得分:4)
我找到了简单而完美的解决方案: POM包括2个存储库:
<repositories>
<repository>
<id>commonDep</id>
<name>common dependency</name>
<url>file://../common/repository</url>
</repository>
<!-- it used when collect dependencies before commit. If developer already download dependency, get it from local repo, save traffik and time -->
<repository>
<id>localPlugins</id>
<name>local plugins</name>
<url>file://${user.home}/.m2/repository</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>commonDep</id>
<name>common dependency</name>
<url>file://../common/repository</url>
</pluginRepository>
<!-- it used when collect dependencies before commit. If developer already download dependency, get it from local repo, save traffik and time -->
<pluginRepository>
<id>localPlugins</id>
<name>local plugins</name>
<url>file://${user.home}/.m2/repository</url>
</pluginRepository>
</pluginRepositories>
当开发人员打开项目时,他按照这样的顺序使用本地,公共和中央存储库。它节省了他的流量。当他完成工作时,他打电话给脚本:
mvn dependency:go-offline -Dmaven.repo.local=../common/repository
项目的所有当前依赖项从其默认本地存储库复制到公共存储库。然后开发人员提交常见。
当我们在teamcity上运行构建时,我们签出项目并使用common并运行它。没有互联网连接,但所有依赖项都存在于公共存储库中。
答案 1 :(得分:1)
是的,你可以亲自做到这一点,我不会推荐它,特别是如果你使用的是SNAPSHOT,但你应该可以。
所以你想要做的就是创建一个网络驱动器(我不知道你是在Windows上还是linux上,但这并不重要。)
然后将该网络驱动器安装在需要它的所有系统上。
然后在maven配置文件中指定本地maven repo位置:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd" >
<localRepository>c:/mvn-repo/</localRepository>
...
</settings>
将 c:/ mvn-repo / 替换为您要使用的网络驱动器上的目录的路径。
您可以将此配置放置在不同的位置,但我建议将其放在生成@ $ {MAVEN_HOME} /conf/settings.xml的根配置文件中。
您需要在每台使用maven的计算机上指定。
然后应该这样做,所有你的maven运行时间将共享相同的本地回购。
那么如何使用不同的目录来绕过不同的项目呢?这是一个棘手的问题,您可以在网络驱动器上使用不同的目录,并通过将其指定为运行时属性来更改localRepository变量@运行时。
mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install
这样你就可以很好地将一个网络驱动器与每个项目的目录分开,然后只需指定变量@运行时间来设置要使用的本地存储库。
答案 2 :(得分:1)
您建议的流程不会扩展。我宁愿设置中央存储库的本地企业镜像,并让开发人员和自动化服务器(teamcity等)使用它。设置简单,易于维护,易于跟踪第三方软件的依赖性并设置限制。
答案 3 :(得分:0)
我想尝试这样的解决方案:
只有一个问题 - 哪个插件可以这种方式复制依赖项?