如何组合maven设置文件

时间:2016-01-28 03:15:16

标签: maven maven-3 nexus

我已经加入了另一个工作团队。两个团队都使用他们自己的Nexus服务器,并为我提供了他们自己的设置文件,所以目前我必须做大量的跳跃,以确保我使用正确的settings.xml文件来构建项目。有没有合并这些文件的好方法?我一直在浏览maven文档,但真的很困惑。设置文件如下(识别信息已删除)

第1组设置文件

<settings>
 <mirrors>
   <mirror>
    <id>Nexus</id>
    <name>Company Nexus Public Mirror</name>
    <url>http://build.company.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
   </mirror>
  </mirrors>
 <servers>
   <server>
    <id>snapshots</id>
    <username>deployment</username>
    <password>password1</password>
   </server>
   <server>
    <id>releases</id>
    <username>deployment</username>
    <password>password2</password>
   </server>
  </servers>
 <activeProfiles>
   <activeProfile>jenkins</activeProfile>
  </activeProfiles>
</settings>

第2组设置文件

<settings>
    <mirrors>
        <mirror>
            <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://domain.company.com:8081/nexus/content/groups/public</url>
        </mirror>
    </mirrors>
    <profiles>
        <profile>
            <id>nexus</id>
            <!--Enable snapshots for the built in central repo to direct -->
            <!--all requests to nexus via the mirror -->
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
            </repositories>
         <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <!--make the profile active all the time -->
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
    <servers>
        <server>
            <id>snapshots</id>
            <username>deployment</username>
            <password>password3</password>
        </server>
        <server>
               <id>releases</id>
               <username>deployment</username>
               <password>password4</password>
        </server>

    </servers>
</settings>

我尝试合并<mirrors>部分,因此列出了两个镜像,但只构建了一个团队的代码。我也不了解服务器的工作方式。我将为不同的服务器提供不同的用户名/密码组合。我认为服务器ID应该与镜像部分中的id匹配,但事实并非如此。但如果不是这样,maven将如何知道要使用哪些快照或发布服务器?

3 个答案:

答案 0 :(得分:0)

根据我的经验,实际上只有一个可行且简单的解决方案,它不包括合并设置文件。

必要时切换设置文件。只需将两个文件放在某处并使用命令行脚本切换它们(从模板文件复制settings.xml顶部)。或者......有不同的命令传入-s ..问题就是你没有很好地与IDE的使用集成。

如果不同服务器的ID值使用不同的名称,您还可以在您的计算机上本地安装Nexus Repository Manager并代理两个外部服务器。但是在您的场景中,由于使用了不同服务器的重叠ID值,因此无法工作。这必须源于两个团队对id用于什么的误解。

答案 1 :(得分:0)

您必须使用以下命令来检查在工件部署期间需要进行哪些设置:

mvn help:effective-settings

有时候,您可能会使用本地设置和全局设置(首先采用maven安装提供的信息,然后采用存储库提供的信息),但是maven不能同时识别两者。使用此命令,您可以验证maven在部署期间进行的实际设置。此外,您可以找到maven正在获取的实际文件,并根据服务器所需的配置正确修改文件(例如,使用vim)。

请记住,settings.xml文件可能存在两个位置:

  1. Maven安装目录

    $ M2_HOME / conf / settings.xml

  2. 用户特定的设置文件

    〜/ .m2 / settings.xml

  

如果两个文件都存在,则它们的内容将合并,其中用户特定的settings.xml为主要文件。 https://maven.apache.org/settings.html

答案 2 :(得分:-1)

如果要将多个设置文件合并为一个,则可以(应该)使用XInclude。这是W3C的推荐,也是您案例的最佳解决方案。

有一个关于Xinclude使用的很棒的教程。这是the link

我希望这会有所帮助。