Maven简介

  1. Maven是什么

    Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

    POM(Porject Object Model):项目对象模型

    image-20221017210535074

  2. Maven的作用

    • 项目构建:提供标准的、跨平台的自动化项目构建方式

    • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。

    • 统一开发结构:提供标准的、统一的项目结构。

      image-20221017210923294

Maven的基础概念

1.仓库

仓库:用于存储资源,各种jar包。

仓库分类:

  • 本地仓库:自己电脑上存储资源的仓库,链接远程仓库获取资源。
  • 远程仓库:
    • 中央仓库:Maven团队维护,存储所有资源的仓库。
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源。

私服的作用:

  • 保护具有版权的资源,包含购买或自主研发的jar
    • 中央仓库中的jar都是开源的,不能存储具有版权的资源。
  • 一定范围内共享资源,仅对内部开放,不对外共享。

image-20221017214802285

2.坐标

  • 什么是坐标?

    Maven中的坐标用于描述仓库中资源的位置。

  • Maven坐标的组成

    • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)。
    • artifactld:定义当前Maven项目名称(通常是模块名称)。
    • version:定义当前项目版本号。
  • Maven坐标的作用

    唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

Maven的下载和配置

1、官网地址

Maven官网地址:https://maven.apache.org/

Maven下载地址:https://maven.apache.org/download.cgi

image-20221004171710649

2、下载安装

下载完成后解压到没有中文字符和空格的目录中(最好别安装到C盘中):

image-20221004172132720

在解压目录中,我们需要着重关注 Maven 的核心配置文件:conf/settings.xml

3、指定本地仓库

本地仓库默认值:用户家目录/.m2/repository。由于本地仓库的默认位置是在用户的家目录下,而家目录往往是在 C 盘,也就是系统盘。将来 Maven 仓库中 jar 包越来越多,仓库体积越来越大,可能会拖慢 C 盘运行速度,影响系统性能。所以建议将 Maven 的本地仓库放在其他盘符下。配置方式如下:

  1. 打开conf目录中的settings.xml文件
  2. 在不是c盘中的一个地方新建一个空目录,把路径复制到<localRepository>标签中

image-20221004172815611

image-20221004172947051

记住:一定要把 localRepository 标签从注释中拿出来。

注意:本地仓库本身也需要使用一个非中文、没有空格的目录。

4、配置阿里云提供的镜像仓库

Maven 下载 jar 包默认访问境外的中央仓库,而国外网站速度很慢。改成阿里云提供的镜像仓库,访问国内网站,可以让 Maven 下载 jar 包的时候速度更快。配置的方式是:

将原来的配置注释掉:

1
2
3
4
5
6
7
8
9
<!--     
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
-->

加入新的配置

1
2
3
4
5
6
7
8
9
10
11
<!--配置阿里云镜像仓库-->
<mirror>
<!--此镜像的唯一标识,用来区分不同的mirror元素-->
<id>nexus-aliyun</id>
<!--对那种仓库进行镜像,简单来说就是代替那种仓库-->
<mirrorOf>central</mirrorOf>
<!--镜像名称-->
<name>Nexus aliyun</name>
<!--镜像URL-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

image-20221004173455696

5、配置 Maven 工程的基础 JDK 版本

如果按照默认配置运行,Java 工程使用的默认 JDK 版本是 1.5,而我们熟悉和常用的是 JDK 1.8 版本。修改配置的方式是:将 profile 标签整个复制到 settings.xml 文件的 profiles 标签内。

1
2
3
4
5
6
7
8
9
10
11
12
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>

image-20221004174921009

6、检查 JAVA_HOME 配置是否正确

Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。

image-20221004180804620

可以用一下命令验证:WIN+R,输入cmd打开界面

1
2
3
4
5
6
7
C:\Users\chen>echo %JAVA_HOME%
D:\Software\Java\JDK

C:\Users\chen>java -version
java version "11.0.16" 2022-07-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.16+11-LTS-199)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.16+11-LTS-199, mixed mode)

7、配置MAVEN_HOME和PATH

新建系统变量,把maven的安装目录复制进去,变量名填MAVEN_HOME

image-20221004181347885

编辑Path配置,新增%MAVEN_HOME%\bin配置

image-20221004181508210

8、验证

1
2
3
4
5
6
C:\Users\chen>mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: D:\Software\apache-maven-3.8.6-bin\apache-maven-3.8.6
Java version: 11.0.16, vendor: Oracle Corporation, runtime: D:\Software\Java\JDK
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

Maven项目构建命令

Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。

1
2
3
4
5
mvn compile 	#编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地仓库

1.编译操作

主程序编译:mvn compile

测试程序编译:mvn test-compile

主体程序编译结果存放的目录:target/classes

测试程序编译结果存放的目录:target/test-classes

2.清理操作

1
mvn clean

效果:删除target目录

3.测试操作

1
mvn test

测试的报告存放的目录:target/surefire-reports

4.打包操作

1
mvn package

打包的结果—jar包,存放的目录:target

5.安装操作

1
mvn install

安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。

另外,安装操作还会将 pom.xml 文件转换为 XXX.pom 文件一起存入本地仓库。所以我们在 Maven 的本地仓库中想看一个 jar 包原始的 pom.xml 文件时,查看对应 XXX.pom 文件即可,它们是名字发生了改变,本质上是同一个文件。

清除在本地仓库的安装。

1
mvn clean install

第一个Maven项目

使用插件创建工程

1
2
3
4
5
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false

创建Java工程

1
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false

创建Web工程

1
mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false

pom.xml解读

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>

<!-- 当前Maven工程的坐标 -->
<!--组织ID-->
<groupId>com.atguigu.maven</groupId>
<!--项目ID-->
<artifactId>pro01-maven-java</artifactId>
<!--版本号:release(完成版),snapshot(开发版)-->
<version>1.0-SNAPSHOT</version>

<!-- 当前Maven工程的打包方式,可选值有下面三种: -->
<!-- jar:表示这个工程是一个Java工程 -->
<!-- war:表示这个工程是一个Web工程 -->
<!-- pom:表示这个工程是“管理其他工程”的工程 -->
<packaging>jar</packaging>

<name>pro01-maven-java</name>
<url>http://maven.apache.org</url>

<properties>
<!-- 工程构建过程中读取源码时使用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!-- 当前工程所依赖的jar包 -->
<dependencies>
<!-- 使用dependency配置一个具体的依赖 -->
<dependency>

<!-- 在dependency标签内使用具体的坐标依赖我们需要的一个jar包 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>

<!-- scope标签配置依赖的范围 -->
<scope>test</scope>
</dependency>
</dependencies>

<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>

依赖管理

1.依赖配置

依赖指当前项目运行所需要的jar,一个项目可以设置多个依赖

格式:

1
2
3
4
5
6
7
8
9
10
11
12
<!--设置当前项目所依赖的所有jar-->
<dependencies>
<!--设置具体的依赖-->
<dependency>
<!--依赖所属群组id-->
<groupId>junit</groupid>
<!--依赖所属项目id-->
<artifactId>junit</artifactId>
<!--依赖版本号-->
<version>4.12</version>
</dependency>
</dependencies>

2.依赖传递

依赖具有传递性(相对概念)

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

依赖传递中的冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

3.可选依赖

可选依赖指对外隐藏当前所依赖的资源——不透明。

1
2
3
4
5
6
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
</p><optional>true</optional>
</dependency>

true

控制资源不被别人看到。

4.排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要。

1
2
3
4
5
6
7
8
9
10
11
<dependeney>
<groupId junit</groupid>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependeney>



org.hamcrest
hamcrest-core

主动断开间接依赖的资源。

5. 依赖范围

依赖的jar默认情况可以在任何地方使用,通过scope标签设定其作用范围

作用范围

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)

image-20221018202342788

5.1 依赖范围的传递性(了解)

带有依赖范围的资源在进行传递时,作用范围将受到影响

image-20221018205025026

生命周期与插件

1. 项目构建生命周期

Maven构建生命周期描述的是一次构建过程经历了多少个事件。

compile——>test-compile——>test——>package——>install

Maven对项目构建的生命周期划分为三套。

  • clean:清理工作
  • default:核心工作,例如编译,测试,打包,部署等
  • site:产生报告,发布站点等

1.1 clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后完成的工作

1.2 default生命周期

image-20221018210304506

1.3 site构建生命周期

  • pre-site:执行一些需要生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要生成站点文档之后完成的工作,并为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

2. 插件

  • 插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<!--执行什么-->
<goals>
<goal>jar</goal>
</goals>
<!--执行位置:执行到generate-test-resources的时候执行这个插件-->
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>

分模块开发与设计

image-20221018214934862

1.聚合

作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。

image-20221018224323716

新建一个工程ssm管理其他四个工程。

  • 创建一个空模块,打包类型为pom
  • 定义当前模块进行构建操作时关联的其他模块的名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.itheima</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>

<!--定义该工程用于进行构建管理-->
<packaging>pom</packaging>
<!--管理的工程列表-->
<modules>
<module>ssm_pojo</module>
<module>ssm_dao</module>
<module>ssm_server</module>
<module>ssm_controller</module>
</modules>
</project>

2.继承

作用:通过继承可以实现在子工程中沿用父工程中的配置。

  • maven中的继承与java中的继承相似,在子工程中配置继承关系。

image-20221019141220328

在子工程中声明其父工程坐标与其对应位置。

1
2
3
4
5
6
7
8
<!--定义该工程的父工程-->
<parent>
<groupId>com.itheima</groupId>
<artifactId>ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<!--填写父工程的pom文件-->
<relativePath>../ssm/pom.xml</relativePath>
</parent>

在父工程中定义依赖管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!--声明此处进行依赖管理-->
<dependencyManagement>
<!--具体的依赖-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>

<!--插件同理-->
<build>
<pluginManagement>
<!--设置插件-->
<plugins>
<!--具体插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

在子工程定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本(版本由父工程进行控制)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>

<!--插件同理-->
<build>
<pluginManagement>
<!--设置插件-->
<plugins>
<!--具体插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>

可继承的资源

image-20221019144203747

2.1 继承与聚合

作用:

  • 聚合用于快速构建项目。
  • 继承用于快速配置。

相同点:

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
  • 聚合与继承均属于设计型模块,并无实际的模块内容。

不同点:

  • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些。
  • 继承是在子模块中配置关系,父模块无法感知那些子模块继承自己。

3.属性

属性类别

  1. 自定义属性
  2. 内置属性
  3. Setting属性
  4. Java系统属性
  5. 环境变量属性

3.1 自定义属性

作用:等同于定义变量,方便统一维护。

定义格式:

1
2
3
4
5
<!--定义自定义属性-->
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>

调用格式:

1
2
3
4
5
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</ artifactId>
<version>${spring.version}</version>
</dependency>

3.2 内置属性

作用:使用maven内置属性快速配置

调用格式:

1
2
${basedir}
${version}

3.3 Setting属性

作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置。

调用格式:

1
${settings.localRepository}

3.4 Java的系统属性

作用:读取Java系统属性

调用格式:

1
${user.home}

系统属性查询方式:

1
mvn help:system

3.5 环境变量属性

作用:读取环境变量属性

调用格式:

1
${env.JAVA_HOME}

系统属性查询方式:

1
mvn help:system

版本管理

SNAPSHOT(快照版本)

  • 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
  • 快照版本会随着开发的进展不断更新

RELEASE(发布版本)

  • 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本

资源配置

作用

  • 在任意配置文件中加载pom文件中定义的属性

  • 调用格式

    1
    ${jdbc.url}
  • 开启配置文件加载pom属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <build>
    <!--配置资源文件对应的信息-->
    <resources>
    <resource>
    <!--设定配置文件对应位置的目录,支持使用属性动态设计路径-->
    <directory>${project.basedir}/src/main/resources</directory>
    <!--开启配置文件的资源加载过滤-->
    <filtering>true</filtering>
    </resource>
    </resources>
    <!--配置测试资源文件对应的信息-->
    <testResources>
    <testResource>
    <directory>${project.basedir}/src/test/resources</directory>
    <filtering>true</filtering>
    </testResource>
    </testResources>
    </build>

示例:

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/test</jdbc.url>
</properties>

<build>
<!--配置资源文件对应的信息-->
<resources>
<resource>
<!--设定配置文件对应位置的目录,支持使用属性动态设计路径-->
<directory>${project.basedir}/src/main/resources</directory>
<!--开启配置文件的资源加载过滤-->
<filtering>true</filtering>
</resource>
</resources>
</build>

jdbc.properties

1
2
3
4
jdbc.driver=com.mysql .jdbc.Driver
jdbc.ur1=${jdbc.url}
jdbc.usernane=root
jdbc.password=itheima

多环境开发配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!--创建多环境-->
<profiles>
<!--定义具体环境,生产环境-->
<profile>
<!--定义环境对应的唯一名称-->
<id>pro_env</id>
<!--定义环境中的专用属性指-->
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/test</jdbc.url>
</properties>
<!--设置默认启动-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--定义具体环境,生产环境-->
<profile>
<id>dep_env</id>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/test</jdbc.url>
</properties>
</profile>
</profiles>

加载指定环境

调用格式

1
mvn 指令 -P 环境定义ID

范例

1
mvn install -P pro_env

跳过测试(了解)

  • 使用命令

    1
    mvn install -D skipTests
  • 使用界面操作

    image-20221019161601634

  • 使用配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <plugin>
    <artifactId>maven-surefire-plugin</artifactid>
    <version>2.22.1</version>
    <configuration>
    <skipTests>true</skipTests>
    <!--设置跳过测试-->
    <includes>
    <!--包含指定的测试用例-->
    <include>**/User*Test.java</include>
    </includes>
    <excludes>
    <!--排除指定的测试用例-->
    <exclude>**/User*Testcase.java</exclude>
    </excludes>
    </configuration>
    </plugin>

私服

1. 分模块开发

image-20221019162044326

2. Nexus

image-20221019171331144

Nexus安装,启动与配置

  • 启动服务器
1
nexus.exe /run nexus
  • 访问服务器
1
http://localhost:8081
  • 修改基础配置信息

    安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如访问默认端口。

  • 修改服务器运行配置信息

    安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间。

3. 私服资源的获取

image-20221019171805528

仓库分类

  • 宿主仓库hosted。
    • 保存无法从中央仓库获取的资源。
      • 自主研发。
      • 第三方非开源项目。
  • 代理仓库proxy
    • 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库。
  • 仓库组group
    • 将若干个仓库组成一个群组,简化配置。
    • 仓库组不能保存资源,属于设计型仓库。

4. IDEA环境中资源的上传和下载

image-20221019204736354

4.1 本地仓库访问私服的权限(setting.xml)

配置本地仓库访问私服的权限

1
2
3
4
5
6
7
8
9
10
11
12
<servers>
<server>
<id>heima-release</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>heima-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>

配置本地仓库的资源来源

1
2
3
4
5
6
7
<mirrors>
<mirror>
<id>nexus-heima</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>

4.2 访问私服配置

配置当前项目访问私服上传资源的保存位置(pom.xml)

1
2
3
4
5
6
7
8
9
10
11
<!--发布配置管理-->
<distributionManagement>
<repository>
<id>heima-releases</id>
<url>http://localhost:8081/repository/heima-releases/</url>
</repository>
<snapshotRepository>
<id>heima-snapshots</id>
<url>http://localhost:8081/repository/heima-snapshots/</url>
</snapshotRepository>
</distributionManagement>

发布资源命令

1
mvn deploy