场景
用maven管理项目时,需要通过pom引入外部jar包,所谓的外部我们统称远程仓库(包括maven私服),部分项目需要搭建公司内部的maven私服,此时引入jar包的方式会有所变化,配置也有不同。
前提
已经搭建好了maven私服(版本2.11),并以maven私服的默认仓库为例。
详解
maven私服的仓库类型
- hosted:表示该仓库是当前私服的仓库
- Proxy:表示该仓库只是一个代理,是把其他地方的仓库代理到当前的私服,当项目向当前仓库请求jar时,该仓库会从被代理的仓库中下载对应的jar,然后存储到当前仓库,并回送给项目。
- virtual:
- group:表示一个仓库组,假设一个项目需要用到私服上的多个仓库,如果没有group,那么就得配置三个仓库。group则可以让其他仓库加入到自己,一个group中可以引入多个仓库,那么项目中只需要配置这个group仓库即可。
maven私服的jar类型(repository policy)
项目开发时,提交的代码并不一定是正确的,因此maven提供了两种格式的jar包,来区分稳定版和开发板。一个仓库只能指定一种jar包类型,表示该仓库中的包要么全是开发版,要么全是稳定版。
- Release:表示当前jar包是稳定版
- Snapshot:表示该jar包还处于开发和测试阶段,不稳定。
maven配置文件加载优先级
pom.xml > /home_dir/.m2/settings.xml > /maven_dir/conf/settings.xml
仓库配置
假设当前项目需要用到仓库A(http://192.168.198.144:8081/nexus/content/groups/public/),此时可根据maven配置的加载优先级将仓库配置到合适的位置。根据需求选择下边任意一种即可。
pom.xml:添加如下配置到pom的第一层(xml),只作用于当前项目
特别注意:仓库只用请求地址表示。其中id、name均是自定义
<repositories>
<!-- 可添加多个 -->
<repository>
<!-- 自定义 -->
<id>id</id>
<!-- 自定义 -->
<name>name</name>
<!-- 仓库地址 -->
<url>http://192.168.198.144:8081/nexus/content/groups/public/</url>
<!-- 是否下载该仓库的release类型包,true下载,false不下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载该仓库的snapshots类型包,true下载,false不下载 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
settings.xml:如果要 把仓库的配置应用到全局,则需要再settings文件中添加配置。
添加profiles后,mirrors可以省略
<profiles>
<profile>
<!-- 自定义 -->
<id>besttop_nexus</id>
<!-- 目前不懂,后期补充 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<!--all requests to nexus via the mirror -->
<repositories>
<!-- 可添加多个 -->
<repository>
<!-- 自定义 -->
<id>id</id>
<!-- 自定义 -->
<name>name</name>
<!-- 仓库地址 -->
<url>http://192.168.198.144:8081/nexus/content/groups/public/</url>
<!-- 是否下载该仓库的release类型包,true下载,false不下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否下载该仓库的snapshots类型包,true下载,false不下载 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>