Maven笔记

127 阅读15分钟

Maven基础

一、Maven概述

1.Maven是什么?

  • Maven本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
    • java编写,管理的东西以面向对象形式进行设计,最终整个项目是一个对象,称POM
  • POM:项目对象模型
  • 主要作用:
    • 自动导入和配置jar包
    • 防止版本冲突

1.1.Maven所需资源

需要一个配置文件pom.xml,通过加载配置文件Maven会了解项目相关信息,每个项目都有自己的pom.xml配置文件。

1.2.Maven进行项目资源管理

Maven第二核心,依赖管理

  • 依赖管理:
    • 对项目所有资源进行管理,和项目间是双向关系;我们可以通过依赖管理获取所需资源;我们的项目也可以被当做资源管理,被别人获取
  • 管理资源存放位置:
    • 本地仓库
      • 存储在本地的资源
    • 私服仓库
      • 远程仓库,存储项目组上传的资源
    • 中央仓库
      • 远程仓库,公开

​ Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,这些功能需要使用一些相关的插件来完成,整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期。

2.Maven作用

  1. 项目构建:提供标准的,跨平台的自动化构建项目的方式
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题
  3. 统一开发结构:提供标准的,统一的项目开发结构,如下图所示:

1.Maven项目目录结构.png

2.1各目录存放资源类型说明:

  • src/main/java:项目java源码

  • src/main/resources:

    • 项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/main/webapp:

    • web资源(比如html,css,js等)
    • webInfo
  • src/test/java:测试代码

  • src/test/resources:测试相关配置文件

  • src/pom.xml:

    • 项目pom文件

二、下载安装Maven

1.新版下载

官网:Maven官网

2.安装

maven是一个绿色软件,解压即安装,非常容易,

我们将下载好的apache-maven-3.6.1-bin.zip直接解压到D盘根目录下即可

解压完成后我们可以查看一下maven自己的一个目录结构如下

2.Maven目录结构.png

各目录结构说明:

目录文件名说明
bin可执行程序目录
bootmaven自身的启动加载器
confmaven配置文件的存放目录
libmaven运行所需库的存放目录

3.配置环境变量

​ 我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME,

​ 在我们的系统环境变量中

配置如下配置:

  • MAVEN_HOME maven的目录
    • F:\RerollWorkspace\apache-maven-3.6.3
  • 在系统的path中配置 %MAVEN_HOME%\bin
  • 之后在命令行窗口中输入mvn -version
    • 测试Maven是否安装成功,配置完毕!

4.配置阿里云镜像

  • 国内建议使用阿里云的镜像(可以百度搜 maven 阿里云镜像,也可以打开下方链接)

  • 阿里云链接直达

  • settings.xml里面的mirrors标签里面导入

    • <!-- 配置阿里云仓库 -->
              <mirror>
      		<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
                  <id>alimaven</id>
      			<!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库 -->
                  <mirrorOf>central</mirrorOf>
      			<!-- 镜像名称 -->
                  <name>aliyun maven</name>
      			<!-- -镜像URL -->
                  <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
              </mirror>
      
      

5.配置本地仓库

在Maven -bin 的同级目录下建立一个文件夹 maven-repo

3.配置本地仓库.png

建立一个本地仓库:localRepository

  • settings.xml里面的localRepository下导入

  • <localRepository>D:\Develop\apache-maven-3.6.1\maven-repo</localRepository>
    

三、Maven基础概念

1.仓库

仓库:用于存储资源,主要是各种jar包

  • 本地仓库:开发者自己电脑上存储资源的仓库,可以连接远程仓库获取资源
  • 远程仓库:
    • 中央仓库:maven团队自身维护的仓库,属于开源的
      • 连接人数多,获取资源较慢
    • 私服:各公司/部门等小范围内存储资源的仓库,
      • 私服也可以从中央仓库获取资源,获得的资源可以存到私服

1.1私服的作用:

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

2.坐标

​ 我们说maven的仓库里存储了各种各样的资源(jar包),我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标

2.1 什么是坐标

坐标:maven中的坐标用于描述仓库中资源的位置

2.2 Maven坐标的作用

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

2.3 maven坐标的主要

maven坐标的主要组成如下:

坐标前缀释义示例
groupId定义当前资源隶属组织名称通常是域名反写,如:org.mybatis;com.itheima
artifactId定义当前资源的名称通常是项目或模块名称,如:crm,sms
version定义当前资源的版本号
packaging(取值如下)定义资源的打包方式,取值一般有如下三种:
jar该资源打成jar包,默认是jarjava工程打包为jar
war该资源打成war包web工程打包为war
pom该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构
<?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>
    <!--打包方式 web工程打包为war java工程打包为jar-->
    <packaging>war</packaging>
    
    <!--组织id-->
    <groupId>com.itheima</groupId>
    <!--项目id-->
    <artifactId>web01</artifactId>
    <!--组织id  release代表完成版,SNAPSHOT代表开发版-->
    <version>1.0-SNAPSHOT</version>
    
    <!--设置当前工程的所有依赖-->
    <dependencies>
        <!--具体的依赖-->
        <dependency>
        </dependency>
    </dependencies>
</project>

四、Maven项目构建

1.Maven命令行进行项目构建

​ 使用mvn开头,后面添加功能参数,可以一次执行多命令,使用空格隔开;

mvn compile #编译:cmd到(pom.xml所在文件夹)工程
mvn clean   #清理
mvn test    #测试:surefire-reports中有测试报告
mvn package #打包:只包源程序,顺序执行编译测试打包
mvn install #安装到本地仓库:将上面打包好的程序安装到本地仓库

2.插件创建工程

#创建工程
mvn archetype:generate
	-DgroupId={project-packaging)
	-DartifactId={project-name}
	-DarchetypeArtifactId-maven-archetype-quickstart
	-DinteractiveMode=false

#创建java工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-projectDarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshotDinteractiveMode=false

#创建web工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-projectDarchetypeArtifactId-maven-archetype-webapp -Dversion=0.0.1-snapshotDinteractiveMode=false

五、idea创建Maven项目

1.idea中maven控制命令

4.idea中maven命令控制.png

2.添加定义maven控制命令

5.添加maven可执行命令.png

3.IDEA配置Tomcat插件

    <!--构建-->
    <build>
        <!--设置插件-->
        <plugins>
            <plugin>
                <!--具体的插件配置-->
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <!--配置端口-->
                <configuration>
                    <port>80</port>
                    <!--虚拟路径-->
                    <path>/</path>
                    <!--解决get请求中文乱码-->
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

插件配置好后,在IDEA右侧maven-project操作面板上可以看到该插件,并且可以利用该插件启动项目

4.pom文件

pom.xml 是Maven的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!--Maven版本和头文件-->
<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.kuang</groupId>
  <artifactId>javaweb-01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--Package:项目的打包方式
  jar:java应用
  war:JavaWeb应用
  -->
  <packaging>war</packaging>


  <!--配置-->
  <properties>
    <!--项目的默认构建编码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--编码版本-->
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <!--项目依赖-->
  <dependencies>
    <!--具体依赖的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>

  <!--项目构建用的东西-->
  <build>
    <finalName>javaweb-01-maven</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

六、Maven依赖管理

1.依赖配置与依赖传递

依赖是指在当前项目中运行所需的jar,依赖配置的格式如下:

<!--设置当前项目所依赖的所有jar-->
<dependencies>
    <!--设置具体的依赖-->
    <dependency>
        <!--依赖所属群组id-->
        <groupId>Junit</groupId>
        <!--依赖所属项目id-->
        <artifactId>Junit</artifactId>
        <!--依赖版本号-->
        <version>4.12</version>
    </dependency>
</dependencies>

依赖传递:依赖具有传递性,分两种

(1)直接依赖:在当前项目中通过依赖配置建立的依赖关系

(2)间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源

1.1、依赖传递冲突

依赖传递的冲突问题:

在依赖传递过程中产生了冲突,我们有三种优先法则

(1)路径优先(靠近根项目--优先):当依赖中出现相同资源时,层级越深,优先级越低,反之则越高

(2)声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的

(3)特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的

1.2.可选依赖

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

  • 加一个<optional> 标签
<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        <optional>true</optional> true:外部会看不到该工程用过该依赖,隐藏了;false不会起作用
    </dependency>
</dependencies>

1.3.排除依赖

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

依赖该工程的工程,该依赖不会传递过去

<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
            
    </dependency>
</dependencies>

2.依赖范围

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

这里的范围主要是指以下三种范围

(1)主程序范围有效(src/main目录范围内)

(2)测试程序范围内有效(src/test目录范围内)

(3)是否参与打包(package指令范围内)

scope标签的取值有四种:compile,test,provided,runtime

这四种取值与范围的对应情况如下:

6.scope范围.png

七、Maven生命周期与插件

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

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

1、clear生命周期

clean:清理工作

  • pre-clean:执行一些在clean之前的工作

  • clean:移除上一次构建产生的所有文件

  • post-clean:执行一些在clean之后立刻完成的工作

2、default生命周期

default:核心工作,例如编译,测试,打包,部署等

这里面的事件非常的多,如下图

7.default生命周期.png

对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

例如:执行test,要从validate开始知道执行完test

3、site生命周期

  • site:产生报告,发布站点等

  • pre-site:执行一些在生成站点文档之前的工作

  • site:生成项目的站点文档

  • post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

  • site-deploy:将生成的站点文档部署到特定的服务器上

4、插件

插件:

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件

  • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能

  • 插件还可以完成一些自定义功能

    插件的配置方式如下:我们以打包源码为例

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <excution>
                     <!-- <goals>内是具体的执行内容-->
                    <goals>
                        <!--当goal属性的值为jar,对源码打包;为test-jar时,是对测试代码打包-->
                        <goal>jar</goal>
                    </goals>
                     <!--执行到 <phase>指定的生命周期阶段,开始执行插件-->
                     <!--generate-test-resources 生成测试资源文件-->
                    <phase>generate-test-resources</phase>
                </excution>
            </executions>
        </plugin>
    </plugins>
</build>

生命周期就是一系列指令,插件与指令绑定,执行到指定的生命周期会执行对应的插件

Maven高级

一、分模块开发与设计(重点)

1.ssm_pojo拆分

  • 新建模块
  • 拷贝原始项目中entity相关内容到ssm_pojo模块
    • 实体类(User)
    • 配置文件(无)

2.ssm_dao拆分

  • 新建模块

  • 拷贝原始项目中dao相关内容到ssm_dao模块

    • 数据层接口(UserDao)

    • 配置文件:保留与数据层相关的3个

      • 注意:分页插件在配置中与sqlSessionFactoryBean绑定,需要保留
    • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标

      • spring

      • mybatis

      • spring整合mybatis

      • mysql、druid、pagehelper

      • 直接依赖ssm_pojo(需要先对该模块执行install指令,安装到本地仓库)

        • <dependency>
                <groupId>com.wind</groupId>
                <artifactId>ssm_pojo</artifactId>
                <version>1.0-SNAPSHOT</version>
          </dependency>
          

3.ssm_service拆分

  • 新建模块
  • 拷贝原始项目中service相关内容到ssm_service模块
    • 数据层接口(UserService、UserServiceImpl)
    • 配置文件:保留与数据层相关的1个
    • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
      • spring
      • junit
      • spring整合junit
      • mysql、druid、pagehelper
      • 直接依赖ssm_dao(需要先对该模块执行install指令)
      • 间接依赖ssm_pojo(ssm_dao模块负责依赖关系建立)
    • 修改service模块spring核心配置文件名,添加模块名称
      • applicationContext-service.xml
    • 修改dao模块spring核心配置文件名,添加模块名称
      • applicationContext-dao.xm
    • 修改单元测试引入的配置文件名称,单个文件修改为多个

4.ssm_controller拆分

  • 新建模块(使用webapp模板)

  • 拷贝原始项目中controller相关内容到ssm_controller模块

    • 表现层控制器类与相关设置类(UserController、异常相关)

    • 配置文件:保留与表现层相关的1个,服务器相关一个

    • pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标

      • spring
      • springmvc
      • jackson
      • tomcat服务器插件
      • 直接依赖ssm_service(需要先对该模块执行install指令)
      • 间接依赖ssm_dao、ssm_pojo
    • 修改web.xml配置文件中加载spring环境的配置文件名称,使用*统配,加载所有applicationContext-开始的配置文件

二、模块聚合(重点)

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

  • 制作方式:

    • 创建一个空模块,打包类型定义为pom

      • <packaging>pom</packaging>
        //不写默认打成jar包
        
    • 定义当前模块进行构建操作时关联其他模块名称

      • <modules>
        	<module>../ssm_pojo</module>
            <module>../ssm_dao</module>
            <module>../ssm_service</module>
            <module>../ssm_controller</module>
        </modules>
        
  • 注意事项:参与聚合操作的模块最终执行顺序与模块间依赖顺序有关,配置顺序无关

三、模块继承(重点)

  • 作用:通过继承,实现在子工程中沿用父工程中的配置

    • maven中继承类似java中继承
  • 制作方式:

    • 子工程中声明其父工程坐标对应位置

    •     <!--定义该工程的父工程-->
          <parent>
              <groupId>com.wind</groupId>
              <artifactId>ssm</artifactId>
              <version>1.0-SNAPSHOT</version>
              <!--填写父工程pom文件-->
              <relativePath>../ssm/pom.xml</relativePath>
          </parent>
      

1.继承依赖定义

父工程中定义依赖管理

    <!--声明此处定义依赖管理-->
	<dependencyManagement>
        <!--具体依赖有-->
        <dependencies>
             <!--需要统一管理的依赖和版本-->
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
                <version></version>
            </dependency>
        </dependencies>
    </dependencyManagement>

子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中的依赖版本

        <dependencies>
             <!--不需要声明版本-->
            <dependency>
                <groupId></groupId>
                <artifactId></artifactId>
            </dependency>
        </dependencies>

2.继承与聚合的区别

  • 作用:
    • 聚合用于快速构建项目
    • 继承用于快速配置
  • 相同点:
    • 继承与聚合的pom.xml文件打包方式都是pom,两种关系可以制作到一个pom文件中
    • 都属于设计型模块,无实际模块内容
  • 不同点:
    • 聚合是当前模块中配置关系,可以感知到参与模块
    • 继承是在子模块中配置关系,父模块感知不到有哪些子模块

8.继承的资源.png

四、属性

1.属性类别:自定义属性

  • 作用:等同于变量,方便统一维护

  • 定义格式:

    • <properties>
      	<spring.version>5.2.0</spring.version>
          <junit.version>4.12</junit.version>
      </properties>
      
  • 调用格式:

    • <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
             <version>${spring.version}</version>
      </dependency>
      

2.属性类别:内置属性

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

  • 调用格式:

    • ${basedir}
      ${version}
      

3.属性类别:Setting属性

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

  • 调用格式:

    • ${settings.localRepository}
      

4.属性类别:java系统属性

  • 作用:读取java系统属性

  • 调用格式:

    • ${user.home}
      
  • 系统属性查询方式

    • mvn help:system
      

五、版本管理

1.工程版本

工程版本:

  • SNAPSHOT(快照版本)
    • 测试阶段版本,随着开发进展不断更新
  • RELEASE(发布版本)
    • 发布的稳定的版本,后续更新,该版本内容也不会变更

2.工程版本好约定

  • 约定规范:
    • <主版本><次版本><增量版本><里程碑版本>
  • 主版本:项目重大架构变更;spring5和spring4
  • 次版本:较大功能增加和变化,或全名系统的修复漏洞
  • 增量版本:有重大漏洞的修复
  • 范例:5.1.19.RELEASE

六、资源配置

配置文件引用pom属性

  • 作用:

    • 任意配置文件中加载pom文件中定义属性
  • 调用格式:

    • ${jdbc.url}
      
  • 开启配置文件加载pom属性:在父工程中

    • ${project.basedir}寻找工程下所有

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

七、多环境开发配置

1.父工程中配置多环境

<!--创建多环境-->
<profiles>
   <!--定义具体的环境:生产环境-->
     <profile>
          <!--定义环境对应的唯一名称-->
            <id>pro_env</id>
           <!--定义环境中专用的属性值-->
             <properties>
                  <jdbe.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
             </properties>
             <!--设置默认启动-->
              <activation>
                    <activeByDefault>true</activeByDefault>
              </activation>
     </profile>
   <!--定义具体的环境:开发环境->
   <profile>
        <id>dev_env</id>
   </profile>
</profiles>

2.加载指定环境

调用格式:

mvn 指令 -p 环境定义id

范例:
mvn install -p pro_env

八、跳过测试

1.方法一

9.跳过测试方法一.png

2.命令行

mvn install -D skipTests

3.配置跳过测试

<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.nexus服务器

2.nexus服务器安装、启动与配置

  • 启动服务器(命令行启动)
    • nexus.exe /run nexus
  • 访问服务器(默认端口:8081)
  • 修改基础配置信息
    • 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
  • 修改服务器运行配置信息
    • 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间

3.仓库分类

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

4.资源上传

  • 上传资源时提供对应的消息
    • 保存的位置(宿主仓库)
    • 资源文件
    • 对应坐标

5.本地仓库访问私服

maven的settings.xml中配置访问私服务器的权限和用户

wind-release需要提前在nexus服务器中创建仓库

<!--配置访问服务器的权限,用户名密码-->
    <servers>
        <server>
            <id>wind-release</id>
            <username>admin</username>
            <password>admin</password>
        </server>
        <server>
            <id>wind-snapshots</id>
            <username>admin</username>
            <password>admin</password>
        </server>
    </servers>

配置本地仓库资源来源:私服镜像

<!--更换私服,将阿里云的私服屏蔽->
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>              		 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    <!--自定义的wind私服,地址url从私服上copy-->
    <!--*表示除了中央仓库,余下资源都从该路径获取-->
   <mirror>
       <id>nexus-wind</id>
       <mirrorOf>*</mirrorOf>
       <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
    </mirrors>

6.本地资源上传私服

访问私服配置(项目工程访问私服)父工程

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

<!--发布配置管理-->
<distributionManagement>
    <repository>
        <id>heima-release</id>
        <url>http://localhost:8081/repository/heima-release/</url>
    </repository>
    <snapshotRepository>
        <id>heima-snapshots</id>
        <url>http://localhost:8081/repository/heima-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

发布资源到私服命令

mvn deploy

十、相关代码后续上传