maven打包提交到远端仓库(deploy)

731 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

maven在编译打包完后生成的制品包如何让别人依赖使用呢?

可以通过deploy发布到远端maven仓库,供其他人使用.

此处的远端maven仓库可以是自己搭建的nexus私服库,也可以是云效制品库、maven中央仓库等公有库,区别是maven中央仓库这类公有库对制品包有审核流程,审核通过后才能发布至maven中央仓库.

今天详细记录下deploy的设置和操作步骤.

前置环境

  1. maven环境 最新版本3.8.6 官网:maven.apache.org/
  2. idea环境 便于使用idea进行deploy操作(使用命令行也可以,非必须)
  3. maven项目,借助idea新建一个maven项目即可

仓库分类

一般来说,远端仓库分为两类:

  1. release库 用于存放已经通过测试,不会在变动的稳定版本,可以用于发行的制品
  2. snapshots库 快照库,用于存放正在开发阶段,变动频繁,不稳定的版本.

配置

配置主要分为两部分:

  1. maven环境的settings.xml文件,配置对应远端maven仓库的id/账号/密码

  2. maven项目内的pom文件,添加远端仓库的路径.

1. settings.xml配置

安装完maven后,会自动生成一个默认的settings.xml文件

我们需要关注其中的几个标签:

1.1 servers

servers用于配置远端maven仓库的账号密码,如下:

<servers>
  <server>
    <id>唯一id,一般为站点</id>
   	<username>用户名</username>
    <password>密码</password>
  </server>
</servers>

如果远端仓库有多个,则可以配置多个远端仓库,即多个server

均包含在servers标签内

1.2 profiles

profiles用于设置不同环境下的属性,比如开发环境/测试环境/生产环境,不同的环境下需要打包发布到不同的仓库,这个时候就可以通过profiles来实现.

首先在profiles中定义多个环境的属性:

<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <repository.id>仓库id 需要与servers中远端仓库id保持一致</repository.id>  
      <repository.name>仓库名称 随意</repository.name>  
      <repository.url>仓库地址</repository.url>  
    </properties>
  </profile>
  <profile>
    <id>test</id>
    <properties>
      <repository.id>仓库id 需要与servers中远端仓库id保持一致</repository.id>  
      <repository.name>仓库名称 随意</repository.name>  
      <repository.url>仓库地址</repository.url>  
    </properties>
  </profile>
</profilse>

可以指定多个环境

1.3 激活配置

profiles中的环境配置可以通过多种方式指定.

  1. settings.xml文件中的activeProfiles标签
<activeProfiles>
    <activeProfile>dev</activeProfile>
</activeProfiles>
  1. profiles中profile可以通过activation标签进行有条件激活,比如jdk1.8时使用某个profile如下:
<profiles>
  <profile>
    <id>jdk1.8</id>
    <activation>
      <jdk>1.8</jdk>
    </activation>
    <properties>
      <repository.id>仓库id 需要与servers中远端仓库id保持一致</repository.id>  
      <repository.name>仓库名称 随意</repository.name>  
      <repository.url>仓库地址</repository.url>  
    </properties>
  </profile>
</profiles>
  1. 通过maven 的-P<profile的id>参数指定
maven clean package -Ptest

如上: 指定profile为test,激活test环境的属性.

2. 项目配置

maven项目的配置主要依赖pom文件中的一个标签:

distributionManagement

如下:

<distributionManagement>
    <repository>
        <id>release仓库id,注意与settings.xml文件中的servers中的id保持一致</id>
        <name>名字 随意</name>
        <url>release仓库路径</url>
    </repository>
    <snapshotRepository>
        <id>snapshot仓库id,注意与settings.xml文件中的servers中的id保持一致</id>
        <name>名字 随意</name>
        <url>snapshot仓库路径</url>
    </snapshotRepository>
</distributionManagement>

最重要的就是仓库的id与settings.xml文件中的servers中的仓库id保持一致,因为打包上传时需要账号密码,均从server中获取.

maven deploy时会通过项目版本号中是否携带SNAPSHOT来判断将制品包上传到release仓库还是snapshot仓库.

因此,我们可以发现,项目创建后的版本号默认都为1.0-SNAPSHOT,即为开发版本.

<groupId>org.example</groupId>
<artifactId>zy_facebody</artifactId>
<version>1.0-SNAPSHOT</version>

打包

项目配置完成后,可以通过命令行直接打包

maven clean deploy 

也可以借助idea工具打包,其实底层还是调用的maven命令

总结

梳理maven deploy的配置信息,加深maven生命周期的理解.

了解maven配置文件中的标签具有的含义,不求倒背如流,需要知道有这样的功能.

有道无术术尚可求,有术无道不可求也~