在项目中使用Maven管理jar包依赖,往往会出现以下状况:
1、国内访问maven默认远程中央镜像特别慢;
2、使用阿里的镜像替代远程中央镜像;
3、阿里云镜像中缺少部分jar包;
4、同时使用私有仓库和公有仓库;
针对以上情况,我们就需要让Maven支持多仓库配置。
常用仓库
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
activiti-repos2
Activiti Repository 2
https://app.camunda.com/nexus/content/groups/public
activiti-repos
Activiti Repository
https://maven.alfresco.com/nexus/content/groups/public
thinkgem-repos2
ThinkGem Repository 2
https://raw.github.com/thinkgem/repository/master
google
Google Repository
https://maven.google.com
6 Maven官方中央仓库(需要x墙)
central
Maven Central
https://repo.maven.apache.org/maven2/
当只配置一个仓库时,操作比较简单,直接在Maven的settings.xml文件中进行全局配置即可,以阿里云的镜像为例:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
只用新增一个mirror配置即可。要做到单一仓库,设置mirrorOf到*。
mirrorOf中配置的星号,表示匹配所有的artifacts,也就是everything使用这里的代理地址。上面的mirrorOf配置了具体的名字,指的是repository的名字。
镜像配置说明:
1、id: 镜像的唯一标识;
2、name: 名称描述;
3、url: 地址;
4、mirrorOf: 指定镜像规则,什么情况下从镜像仓库拉取。其中, *: 匹配所有,所有内容都从镜像拉取;
external:*: 除了本地缓存的所有从镜像仓库拉取;
repo,repo1: repo或者repo1,这里的repo指的仓库ID;
*,!repo1: 除了repo1的所有仓库;
那么针对多仓库的配置是否再多配置几个mirror就可以了?如此配置并不会生效。
正确的操作是在profiles节点下配置多个profile,而且配置之后要激活。
aliyun
alimaven
Aliyun Maven
http://maven.aliyun.com/nexus/content/groups/public/
activiti-repos
activiti-repos2
Activiti Repository 2
https://app.camunda.com/nexus/content/groups/public
activiti-repos
Activiti Repository
https://maven.alfresco.com/nexus/content/groups/public
central-repos
central-repos
Central Repository
http://repo.maven.apache.org/maven2
central-repos1
Central Repository 2
http://repo1.maven.org/maven2/
thinkgem-repos
thinkgem-repos
ThinkGem Repository
http://git.oschina.net/thinkgem/repos/raw/master
thinkgem-repos2
ThinkGem Repository 2
https://raw.github.com/thinkgem/repository/master
google-repo
google
Google Repository
https://maven.google.com
official-central-repo
central
Official Maven Central
https://repo.maven.apache.org/maven2
通过配置activeProfiles子节点激活:
aliyun
activiti-repos
central-repos
thinkgem-repos
google-repo
official-central-repo
此时如果是在Idea中使用了本地的Maven配置,那么在项目的Maven管理中会看到类似如下图中的profile选项。
打包时,勾选所使用的profile即可。如果使用Maven命令打包执行命令格式如下:
mvn -Paliyun ...
1.如果aliyun仓库的id设置为central,则会覆盖maven里默认的远程仓库。
2.aliyun的仓库也可以不用配置,直接在mirrors标签内配置一个镜像仓库,mirrors镜像仓库mirrorOf的值设置为central,则也可以实现覆盖默认的仓库。
在项目中添加多个仓库,是通过修改项目中的pom文件实现的。
思路:在项目中pom文件的repositories节点(如果没有手动添加)下添加多个repository节点,每个repository节点是一个仓库。
配置效果如下:
alimaven
Aliyun Maven
http://maven.aliyun.com/nexus/content/groups/public/
activiti-repos2
Activiti Repository 2
https://app.camunda.com/nexus/content/groups/public
activiti-repos
Activiti Repository
https://maven.alfresco.com/nexus/content/groups/public
central-repos
Central Repository
http://repo.maven.apache.org/maven2
central-repos1
Central Repository 2
http://repo1.maven.org/maven2/
thinkgem-repos
ThinkGem Repository
http://git.oschina.net/thinkgem/repos/raw/master
thinkgem-repos2
ThinkGem Repository 2
https://raw.github.com/thinkgem/repository/master
google
Google Repository
https://maven.google.com
alimaven
aliyun maven
http://maven.aliyun.com/mvn/view
central
jboss-public-repository-group
central
JBoss Public Repository Group
http://repository.jboss.org/nexus/content/groups/public
ibiblio
central
Human Readable Name for this Mirror.
https://maven.aliyun.com/mvn/view
central
Maven Repository Switchboard
http://repo1.maven.org/maven2/
central
repo2
central
Human Readable Name for this Mirror.
http://repo2.maven.org/maven2/