maven - 镜像取决于项目

问题描述 投票:0回答:3

我在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 mirror
3个回答
2
投票

不幸的是,Maven 没有现成的解决方案。通常我通过 git 检查我的

settings.xml
并为不同的网络(如工作、家庭等)设置不同的分支。结果简化为简单的

git checkout HOME

git checkout WORK

等等


1
投票

解决方案不是使用mirror-any,而是使用特定的存储库声明和依赖项pom清理。 这样,您将像使用mirror-any一样受到保护,不会访问未经授权的存储库,并且您将能够在每个配置文件中使用不同的服务器来声明配置文件(工作和家庭)。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.