公司内部自行开发的依赖包需要上传到maven私服时,可以在项目的pom.xml中配置,也可以在本地计算机的maven目录settings.xml中配置。本文讲述的是如何在settings.xml中进行配置。
场景:有两个maven私服,其中一个为公司的,另一个为个人的,每个私服都有release库和snapshot库,加起来一共4个库:
公司的:company-release company-snapshot
个人的:personal-release personal-snapshot
下面的配置代码中的注释描述了配置方法
<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- 本地仓库路径 -->
<localRepository>D:\maven\repo</localRepository>
<servers>
<!-- server标签用来配置私服的用户名和密码,每个repo都对应一个server,
咱们有4个repo(公司release,公司snapshot,个人release,个人snapshot),
当然就有4个server块。
-->
<!--公司release -->
<server>
<!--server id要与profile中的repository id
和altReleaseDeploymentRepository中的id一致 -->
<id>company-release</id>
<username>{your repo username}</username>
<password>{your repo password}</password>
</server>
<!--公司snapshot -->
<server>
<id>company-snapshot</id>
<username>{your repo username}</username>
<password>{your repo password}</password>
</server>
<!--个人release -->
<server>
<id>personal-release</id>
<username>{your repo username}</username>
<password>{your repo password}</password>
</server>
<!--个人snapshot -->
<server>
<id>personal-snapshot</id>
<username>{your repo username}</username>
<password>{your repo password}</password>
</server>
</servers>
<!-- 注意配置mirror时,mirrorOf一定要排除私服的repository id
否则私服的仓库也会用mirror代理,导致找不到依赖。-->
<mirrors>
<mirror>
<id>aliyunmaven</id>
<!-- mirrorOf表示这个镜像是哪些repository的镜像,
这里声明的是这个镜像是central, jcenter的镜像,
那么自然私服不会被镜像代理。
如果某个镜像想代理除私服之外的所有repository,
那么就要使用排除法,写法为:
<mirrorOf>*,!company-release,!company-snapshot,!personal-release,!personal-
snapshot</mirrorOf>
上面的"*"表示该镜像代理所有repository,"!"表示排除这个repository,
这样除了带"!"的repo以外的所有repo都会被该镜像代理。
-->
<mirrorOf>central,jcenter</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<!-- 公司maven私服配置 -->
<profile>
<!-- profile id用于标识profile,当选择要激活哪个配置时会用到,下面会讲 -->
<id>company</id>
<properties>
<!-- altReleaseDeploymentRepository用于配置推送信息
标签里面的值格式为:repository-id::default::url
其中repository-id和下文的repository标签里的id是一样的,
当然也就和server id一样,这样才能正确传递用户名密码。
-->
<!-- altReleaseDeploymentRepository是release库信息
当你往release库推送时会用到-->
<altReleaseDeploymentRepository>
company-release::default::https://xxxx.xxx
</altReleaseDeploymentRepository>
<!-- altSnapshotDeploymentRepository是snapshot库信息
当你往snapshot库推送时会用到-->
<altSnapshotDeploymentRepository>
company-snapshot::default::https://xxxx.xxx
</altSnapshotDeploymentRepository>
</properties>
<repositories>
<!-- repository用于配置拉取 -->
<repository>
<!-- repository id要和server id保持一致,
才能正确传递用户名和密码。 -->
<id>company-release</id>
<!-- repo的url -->
<url>https://xxxx.xxx</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>company-snapshot</id>
<url>https://xxxx.xxx</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<!-- 个人的私服配置 -->
<profile>
<id>personal</id>
<properties>
<altReleaseDeploymentRepository>
personal-release::default::https://xxxx.xxx
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
personal-snapshot::default::https://xxxx.xxx
</altSnapshotDeploymentRepository>
</properties>
<repositories>
<repository>
<id>personal-release</id>
<url>https://xxxx.xxx</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>personal-snapshot</id>
<url>https://xxxx.xxx</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!-- 当存在多个私服时,
选择要推送给哪个私服修改这里即可,
将 <activeProfile></activeProfile>标签中的值
改为上面配置的profile中对应远程库的profile id。
然后你的项目的pom文件中,
版本号中如果是x.x.x-SNAPSHOT结尾(注意SNAPSHOT要大写)的,
maven会自动上传到snapshot库,否则上传到release库。
比如你的项目的pom文件中写的版本号是"0.0.1-SNAPSHOT",
那么使用"mvn deploy"命令就会自动上传到快照库。
-->
<activeProfiles>
<activeProfile>company</activeProfile>
</activeProfiles>
<!--这里选择的是company私服配置,
那么如果项目的pom中写的版本号是"0.0.1-SNAPSHOT",
使用"mvn deploy"命令就会上传到公司私服的snapshot库。
也就是前面代码定义的id叫做"company-snapshot"的repository。
如果要上传到company-release库,那么版本号就写成"0.0.1"即可。
-->
</settings>