在上一篇文章中,说到了在项目中通过使用<repositories>标签来配置一个Nexus的工厂,使得依赖都能够先从局域网共享仓库(nexus )里寻找。但是这种配置还是不太方便,因为我们每创建一个项目,都要在项目的pom.xml文件里配置<repositories>。
当然了,如果所有项目都继承一个根类项目,那么就只是在根类项目里配置一次<repositories>就OK,其他项目都继承这个根类项目,这种方式也可以。
在现实实际中,不可能所有的项目都会用到继承,而我们又不想老是去配置<repositories>(其实配置一下也OK,看个人喜好啦。),这时可以把<repositories>这部分配置到maven的setting.xml的节点<profiles>里。<profiles>里可以配置多个<profile>,<repositories>里也是可以配置多个<repository>。按照我自己的理解,每个<profile>就相当于<repositories>的<repository>。不同点在于:<repositories>里配置的多个<repository>都是有效的;而<profiles>里配置了多个<profile>,需要使用<activeProfiles>来进行**,**了哪个<profile>,哪个<profile>才生效。
<repositories>里配置<repository>在上文中已经说过,这里就不再重复记录了。在这里主要是记录如何把pom.xml中的<repositories>配置,转移到setting.xml里。
配上代码:
- <profile>
- <id>nexusProfile</id>
- <repositories>
- <repository>
- <id>xx</id>
- <name>111</name>
- <url>http://localhost:8081/nexus/content/groups/public/</url>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- <releases>
- <enabled>true</enabled>
- </releases>
- <layout>default</layout>
- </repository>
- </repositories>
- </profile>
- <activeProfiles>
- <!--**了才生效-->
- <activeProfile>nexusProfile</activeProfile>
- </activeProfiles>
在setting.xml中配置了profile以后,pom.xml中的<repositories>就可以去掉了。
测试一下配置是否生效:在pom..xml里添加一个jetty-servlet.jar的依赖,在控制台可以看到如下打印信息:
打开nexus的管理界面,可以在nexus里找到刚下载的jetty-servlet.jar依赖包:
至此,setting.xml里配置profile就成功了。
总述:不管是前一篇文章提到的在pom.xml配置<repositories>,还是在该文章中说到的在setting.xml里配置<profile>,目的都是相同的,都是为了配置一个局域网共享仓库(nexus),起到的作用是,当在同一局域网(一般都是一个项目组,在同一局域网中的。当然了也可能是外网,如分公司与总公司的开发人员,但是如果是外网,那我觉得就没必要配置nexus了,直接去maven*仓库下载更方便。)的用户更新maven项目,或者往maven里添加依赖的时候,此时会先从本地仓库查找,如果本地仓库不存在某些依赖,会去局域网共享仓库(nexus)里寻找,如果也没有,nexus就会和maven*仓库打交道,下载对应的依赖包,然后再提交到本地仓库。
所以按照我个人的看法,pom.xml配置<repositories>也好,setting.xml里配置<profile>也罢。同一种效果的不同配置。就像数学问题一样,可以有多种解法。就看个人喜好啦。嘿嘿~~~不过我自己还是偏向于后者,一劳永逸嘛。