2016-07-05 20 views
0

我遇到了拉入新版本库的问题,这个库位于不同的存储库中。我相信我必须更新我的settings.xml和我的父级pom.xml,它指定了新版本。使用多个Maven镜像将不同的jar版本拉入项目

目前我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版本,但我可以在mod2的2.3版本从serenity回购拉。谢谢你的帮助。

+1

Maven没有理由在这里寻找版本2.3,因为版本明确3.2。虽然配置文件'default'没有被激活,在设置中应该有一个'默认'。也就是说,即使这个配置文件没有被激活,Maven也应该查看安静回购,失败,然后查看7.169.72.8(或者反过来,不知道镜像是否有顺序)。 – Tunaki

+0

正是我的想法。由于pom明确地说3.2,为什么它从'宁静'(即2.3) – jiveturkey

+0

拉出来某个地方,版本正在被重新定义。你的依赖在一个'dependencyManagement'里面,所以也许一个使用它的子项目将版本重新定义为2.3?或者有一个系统属性设置'mod2.version'? – Tunaki

回答

0

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

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

在你的情况,Maven是采摘中央的第一反射镜,这是ID nexus,而忽略了第二个,这是ID mods的。因此,在获取工件时,它只会搜索nexus并找不到它。

有几个解决方案:

  • 如果你真的想为同一个库多个镜像,你将需要使用一个repository manager和配置这在回购管理器本身。
  • 目前尚不清楚为什么您需要镜像中央并指向7.169.72.8:8081如果此存储库没有使您的构建工作所需的所有工件。如果其余部分位于serenity.gm.edu上,则可以在serenity.gm.edu上承载所有这些文件。
  • 您也可以根本不使用mods镜像。让serenity.gm.edu成为Central的镜像,只需声明一个不是Central的新存储库即可获取您的工件。你已经宣布mod-thirdpartymod-snapshots库,所以这是根据与激活他们的个人资料的问题:

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

    。有了这个,Maven还会在为这些回购配置的URL上寻找您的工件(并且那些不会被nexus镜像)。

+0

我无法控制回购协议,我曾经对那些人做过尖叫,所以我不得不选择第3种方式。这意味着将7.169.72.8作为镜像作为'settings.xml'中的回购协议,并添加“ activeProfile'? – jiveturkey

+0

@jnbbender正确。 – Tunaki

+0

我加了'activeProfile'但没有成功。在'serenity'条目指定为' *'之后,我再次将其作为镜像添加后,我终于能够正常工作。所以我现在有2个镜像和一个默认的'activeProfile'。 – jiveturkey

相关问题