maven - 镜像取决于项目

时间:2013-06-20 04:08:19

标签: maven mirror

我在settings.xml中有一个像maven中央设置的镜像:

<mirrors>
  <mirror>
    <id>artifactory-other</id>
    <mirrorOf>*</mirrorOf>
    <url>http://some.internal.site/artifactory/repo</url>
    <name>Artifactory</name>
  </mirror>
</mirrors>

但是此服务器只能从内部网络访问。当我在家里修补一些辅助项目时,我需要访问真正的存储库。现在我只是评论这个镜子,但这很麻烦。

如何让它自动化?是否可以使用单独的镜像定义配置文件并根据项目路径自动激活?有一些简单的解决方案吗?

3 个答案:

答案 0 :(得分:1)

不幸的是,Maven没有开箱即用的解决方案。通常我通过git检查我的settings.xml并为不同的网络设置不同的分支,例如工作,家庭等。结果简化为简单

git checkout HOME

git checkout WORK

答案 1 :(得分:1)

解决方案不是使用mirror-any,而是使用dependencies pom cleanups的特定存储库声明。 通过这种方式,您可以像使用mirror-any一样受到保护,不会受到未经授权的回购,并且您将能够使用不同的服务器声明配置文件(工作和家庭)。

答案 2 :(得分:0)

使用新的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.0.1</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