我已经加入了另一个工作团队。两个团队都使用他们自己的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将如何知道要使用哪些快照或发布服务器?
答案 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文件可能存在两个位置:
Maven安装目录
$ M2_HOME / conf / settings.xml
用户特定的设置文件
〜/ .m2 / settings.xml
如果两个文件都存在,则它们的内容将合并,其中用户特定的settings.xml为主要文件。 https://maven.apache.org/settings.html
答案 2 :(得分:-1)
如果要将多个设置文件合并为一个,则可以(应该)使用XInclude。这是W3C的推荐,也是您案例的最佳解决方案。
有一个关于Xinclude使用的很棒的教程。这是the link
我希望这会有所帮助。