本篇文章写于2021年06月27日,从公众号|掘金|CSDN手工同步过来(博客搬家),本篇为原创文章。
个人项目笔者喜欢使用的构建工具是Gradle,所以去年写的这篇《教你如何将开源项目发布到maven中央仓库》介绍的是Gradle工程如何配置将开源项目发布到maven中央仓库。而公司项目使用的是maven,并且不是推送到maven中央仓库,而是推送到私有仓库nexus,本篇将介绍如何将sdk项目打包部署到私有仓库。
其实部署到maven中央仓库也是一样的,只是配置不同。
我们将学习两种配置,一种是一个项目只有一个模块的配置,另一种是一个项目有多个模块且我们只需要推送其中一个模块到私有仓库的配置。
一个项目只有一个模块
通常是公用组件。
在项目(父工程)的pom.xml添加仓库地址配置,如下
<distributionManagement>
<repository>
<!-- id随意,maven setting.xml中添加server配置也用到 -->
<id>nexus</id>
<name>maven-releases</name>
<!-- 你们搭建的私有仓库地址 -->
<url>http://[your private nexus domain]/repository/maven-releases/</url>
</repository>
</distributionManagement>
在maven settings.xml中添加server配置,如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus</id>
<username>username</username>
<password>password</password>
</server>
</servers>
</settings>
其中账号、密码为登录Nexus的账号密码,要求有上传权限。
提示:server(settings.xml)的id要与repository(pom.xml)的id相同。
项目打包并推送到Nexus:
一个项目多个模块只部署其中一个模块
通常是业务项目,而需要部署到私有仓库的模块通常是为方便其它微服务调用而封装的SDK模块。
同样也是在项目(父工程)的pom.xml添加仓库地址配置,如下
<distributionManagement>
<repository>
<!-- id随意,maven setting.xml中添加server配置也用到 -->
<id>nexus</id>
<name>maven-releases</name>
<!-- 你们搭建的私有仓库地址 -->
<url>http://[your private nexus domain]/repository/maven-releases/</url>
</repository>
</distributionManagement>
同样也需要在maven settings.xml中添加server配置,如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus</id>
<username>username</username>
<password>password</password>
</server>
</servers>
</settings>
使用命令方式推送子模块到nexus如下
mvn clean deploy -pl [子模块名称] -DskipTests
- -pl: 指定推送的子模块,多个使用’,‘分割,如果全部推送则不指定-pl;
- -DskipTests:跳过测试;
对于不需要推送到私服仓库的子模块,最好在子模块下添加如下配置
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
提示:如果报错401,说明maven配置文件settings.xml没有配置server或者账号没有权限。
如果是使用idea的maven插件->Lifecycle->deploy推送
- 1、先配置Preferences -> Build -> Maven 覆盖默认的settings.xml配置文件;
- 2、在新的settings.xml配置文件中添加server配置;
- 3、如果只是推送某个子模块,执行子模块的Lifecycle->deploy。
提示:如果子模块的pom.xml依赖了父模块的pom.xml,那么不建议使用此方式,此方式不会将父模块的pom.xml推送到maven。
特别提示
如果使用命令方法deploy,请一定要确保在系统环境变量中指定的maven使用的settings.xml与idea配置的maven使用的settings.xml一致,否则会遇到很多问题,如401。
如果你遇到这种情况,明明在settings.xml中配置了server,结果配置好像没生效,那么你可能遇到的就是配置文件不一致的问题。
- MAC下~/.base_profile中配置maven环境变量如下
#maven环境变量
MAVEN_HOME=/Users/wjy/JavaApp/apache-maven-3.6.1
export PATH=$PATH:$MAVEN_HOME/bin
默认使用MAVEN_HOME/conf/settings.xml。
- IDEA可配置使用的maven以及settings.xml。