我在settings.xml中有一个用于maven中央设置的镜像:
<mirrors>
<mirror>
<id>artifactory-other</id>
<mirrorOf>*</mirrorOf>
<url>http://some.internal.site/artifactory/repo</url>
<name>Artifactory</name>
</mirror>
</mirrors>
但是该服务器只能从内部网络访问。当我在家修改一些副业项目时,我需要访问真正的存储库。现在我只是把这个镜像注释掉,但是很麻烦。
如何使其自动?是否可以定义具有单独镜像的配置文件并根据项目路径自动激活?有什么简单的解决办法吗?
不幸的是,Maven 没有现成的解决方案。通常我通过 git 检查我的
settings.xml
并为不同的网络(如工作、家庭等)设置不同的分支。结果简化为简单的
git checkout HOME
或
git checkout WORK
等等
解决方案不是使用mirror-any,而是使用特定的存储库声明和依赖项pom清理。 这样,您将像使用mirror-any一样受到保护,不会访问未经授权的存储库,并且您将能够在每个配置文件中使用不同的服务器来声明配置文件(工作和家庭)。
使用新的 maven (3.3.1+),使用 project-settings-extension 加载项目设置,并将项目特定的镜像放入每个项目中的
${basedir}/.mvn/settings.xml
中。
在
${basedir}/.mvn/extensions.xml
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.github.gzm55.maven</groupId>
<artifactId>project-settings-extension</artifactId>
<version>0.3.5</version>
</extension>
</extensions>
在
${basedir}/.mvn/settings.xml
<settings>
<mirrors>
<mirror>
<id>id</id>
<url>https://internal-repo/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
然后该项目将在内网中开箱即用构建
mvn test
,并且不会污染您的个人.m2/settings.xml