使用多个Maven镜像将不同的jar版本拉入项目中

时间:2016-07-05 15:20:03

标签: maven

我遇到了一个新版本的库,它存在于不同的存储库中。我相信我必须更新我的settings.xml和我的父级pom.xml,它指定了新版本。

目前我的settings.xml内容如下:

<settings>
   <mirrors>
      <mirror>
         <id>nexus</id>
         <url>http://serenity.gm.edu/nexus/content/groups/public/</url>
         <mirrorOf>central</mirrorOf>
      </mirror>
      <mirror>
         <id>mods</id>
         <url>http://7.169.72.8:8081/nexus/content/repositories/releases/</url>
         <mirrorOf>central</mirrorOf>
      </mirror>
  </mirrors>
  <profiles>
     <profile>
        <id>default</id>
        <repositories>
           <repository>
              <id>mod-thirdparty</id>
              <url>http://7.169.72.8:8081/nexus/content/repositories/thridparty/</url>
           </repository>
           <repository>
              <id>mod-snapshots</id>
              <url>http://7.169.72.8:8081/nexus/content/repositories/snapshots/</url>
           </repository>
       </repositories>
   </profile>
</profiles>

<servers>
   <server>
      <id>Tomcat</id>
      <username>admin</username>
      <password>xxx</password>
   </server>
</servers>

从中获取所有内容的默认镜像是宁静。我试图从7.169.72.8中提取自定义库mod3.2,但2.3版本仍然从平静中获取。我尝试了许多<mirrorOf>设置,例如*,!central,但没有成功。

我的父pom.xml非常简单,可以定义模块,权限和全局依赖项列表。以下是感兴趣的项目(显示时间太长)。

<project ...>
...
<distributionManagement>
   <repository>
      <id>releases</id>
      <name>mod2-releases</name>
         <url>http://7.169.72.8:8081/nexus/content/repositories/releases</url>
   </repository>
   <snapshotRepository>
      <id>snapshots</id>
      <name>mod2-snapshots</name>
         <url>http://7.169.72.8:8081/nexus/content/repositories/snapshots</url>
   </snapshotRepository>
</distributionManagement>

<properties>
    ...
    <mod2.version>3.2</mod2.version>
    ...
</properties>

    ...

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>mod2.commons</groupId>
         <artifactId>mod2.commons.lang</groupId>
         <version>${mod2.version}</version>
      </dependency>
      <dependency>
         <groupId>mod2.commons</groupId>
         <artifactId>mod2.commons.audit</groupId>
         <version>${mod2.version}</version>
      </dependency>
    </dependencies>
</dependencyManagement>
</project>

回顾一下 - 我试图从7.169.72.8获取版本mod2版本3.2,但我可以从serenity repo中获取mod2版本2.3。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在您的配置中,您要为Central存储库声明多个镜像。但是,Maven does not support that

  

请注意,给定存储库最多只能有一个镜像。换句话说,您无法将单个存储库映射到一组都定义相同值的镜像。 Maven不会聚合镜子,只是选择第一场比赛。如果要提供多个存储库的组合视图,请改用存储库管理器。

在你的情况下,Maven选择了第一个中心镜像,其标识为nexus,而忽略了第二个镜像,其标识为mods。因此,在获取工件时,它仅搜索nexus并且无法找到它。

有几种解决方案:

  • 如果您真的想为同一个存储库安装多个镜像,则需要使用repository manager并在repo管理器本身上配置它。
  • 如果此存储库没有使构建工作所需的所有工件,则不清楚为什么需要镜像Central并指向7.169.72.8:8081。如果其余内容托管在serenity.gm.edu上,则您可以在serenity.gm.edu上托管所有内容。
  • 您根本无法使用mods镜像。让serenity.gm.edu成为Central的镜像,只需声明一个新的存储库,它不是获取工件的中心。您已经声明了mod-thirdpartymod-snapshots存储库,因此这是激活它们所使用的配置文件的问题:

    <activeProfiles>
      <activeProfile>default</activeProfile>
    </activeProfiles>
    
    settings.xml中的

    。有了这个,Maven还会在为这些仓库配置的URL中查找您的工件(并且这些工件不会被nexus镜像)。