128.【Maven】

news2024/10/7 14:28:12

Maven仓库

  • (一)、Maven 简介
    • 1.传统项目管理的缺点
    • 2.Maven是什么
    • 3.Maven的作用
  • (二)、Maven 的下载与安装
    • 1.下载与认识目录
    • 2.配置Maven的全局环境
  • (三)、Maven 的基础概念
    • 1.Maven 仓库
        • (1).仓库分类
    • 2. Maven 坐标
    • 3.Maven 本地仓库配置
        • (1).改变默认的仓库地址
        • (2).改变远程仓库地址 (配置镜像)
  • (四)、第一个Maven项目 (纯手写)
    • 1.编写基本框架代码
    • 2.填充Pom.xml至项目中
    • 3.Maven 项目构建命令
    • 4.使用插件创建Maven项目
  • (五)、第一个Maven项目 (IDea)
    • 1.配置 Maven
    • 2.创建Maven项目
    • 3.设置插件
  • (六)、依赖管理
    • 1.依赖配置
    • 2.依赖传递
    • 3.可选依赖 (被动断)
    • 4.排除依赖 (主动断)
    • 5.依赖范围
    • 6.依赖范围传递性
  • (七)、生命周期与插件
    • 1.生命周期
        • (1).Maven生命周期三阶段
        • (2).Clean 生命周期
        • (3).Default 生命周期
        • (4).Site生命周期
    • 2.插件
        • (1).插件的定义
        • (2).插件的用列
  • (八)、分模块开发与设计
    • 1.拆分springMvc_ssm项目
        • (1).ssm_pojo 拆分
        • (2).ssm_dao 拆分
        • (3).ssm_service 拆分
        • (4).ssm_controller 拆分
        • (5).分模块开发小结
    • 2.模块聚合
        • (1).多模块构建维护
        • (2).聚合
    • 3.模块继承
        • (1).多模块继承
        • (2).继承
        • (3).继承的资源
        • (4).继承与聚合
    • 4.属性
        • (1).自定义属性
        • (2).内置属性
        • (3).Setting 属性
        • (4).Java 系统属性
        • (5).环境变量属性
    • 5.版本管理
        • (1).工程版本
        • (2).工程版本号约定
    • 6.资源配置
        • (1).资源配置多文件维护
        • (2).配置文件中读取pom属性值
    • 7.多环境开发配置
        • (1).多环境兼容
        • (2).加载指定环境
    • 8.跳过测试
        • (1).使用命令跳过测试
        • (2).使用界面操作跳过测试
        • (3).使用配置跳过测试
    • 9.私服 (局部多台计算机共享)
        • (1). 安装 Nexus 服务器
        • (2).启动 Nexus 服务器
        • (3).私服资源获取
        • (4).仓库分类 (三种)
        • (5).可视化UI资源上传
        • (6). 本地仓库访问私服
        • (7).idea 访问私服与组件上传

在这里插入图片描述

(一)、Maven 简介

1.传统项目管理的缺点

  1. jar 包不统一,jar 包不兼容;
  2. 工程升级维护过程操作繁琐;

2.Maven是什么

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

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

在这里插入图片描述

3.Maven的作用

  • 项目构建:提供标准的跨平台的自动化项目构建方式;
  • 依赖管理:方便快捷地管理项目依赖的资源 (jar 包), 避免资源间的版本冲突问题。
  • 统一开发结构: 提供标准的、统一的项目结构

在这里插入图片描述

(二)、Maven 的下载与安装

1.下载与认识目录

https://maven.apache.org/download.cgi

在这里插入图片描述

  • bin 目录:核心运行文件;
  • boot 目录: 类加载器;
  • conf 目录:核心配置;
  • lib 目录:所依赖的 jar 包;
    在这里插入图片描述

2.配置Maven的全局环境

1.配置高级环境
在这里插入图片描述
2.输入cmd 测试是否全局配置成功!!!
在这里插入图片描述

(三)、Maven 的基础概念

1.Maven 仓库

用于存储资源,包含各种 jar 包。

中央仓库由Maven开发者团队进行维护,私服服务器由各个公司的局域网进行管理。 正常开发者需要一个Jar现在本地找,假如本地找不到要门去私服下载对应的Jar包,要么去Maven官方管理的Maven中央仓库去下载。

在这里插入图片描述

(1).仓库分类

  1. 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源;
  2. 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
    ① 中央仓库:Maven 团队维护,存储所有资源的仓库;
    ② 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源;

私服的作用

① 保存具有版权的资源,包含购买或自主研发的 jar;
② 解决访问速度慢的问题;

2. Maven 坐标

描述仓库中资源的位置。 让Maven能够更快捷的帮助我们找到对应的Jar包。
在这里插入图片描述

组成:

groupId (组织ID): 定义当前 Maven 项目隶属的组织名称(通常是域名反写,如 org.mybatis) ;
artifactId (项目名ID): 定义当前 Maven 项目名称(通常是模块名称,例如 CRM, SMS)
version (项目版本号): 定义当前项目版本号;
packaging: 定义当前项目的版本号;

3.Maven 本地仓库配置

我们安装Maven的时候,官方不会给我们默认指定一个Maven的仓库的,需要我们开发者自己来对其进行配置和安装。

我们在命令控制台中输入 CMD 然后回车 ,再输入mvn,Maven官方会再电脑用户给我们生成一个 .m2的文件夹。这个文件夹就是我们所说的Maven本地仓库

在这里插入图片描述

(1).改变默认的仓库地址

在这里插入图片描述
在下面位置放置我们自定义的 Maven本地仓库地址
在这里插入图片描述

  <localRepository>E:\Maven\apache-maven-3.6.3\maven-repo</localRepository>

(2).改变远程仓库地址 (配置镜像)

因为我们没有私服,只能借用阿里云的镜像进行快速访问外网Maven中央仓库
在这里插入图片描述

    <mirror>
    <!-- 此镜像的唯一标识符,用来区分不同 mirror 元素 -->
      <id>nexus-aliyun</id>
      <!-- 对哪个仓库进行镜像,简单来说就是要替换哪个仓库 -->
      <mirrorOf>*</mirrorOf>
      <!-- 镜像名称 -->
      <name>Nexus aliyun</name>
      <!-- 镜像 URL -->
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors

(四)、第一个Maven项目 (纯手写)

1.编写基本框架代码

我们需要手动编写: main包和test包在src父包中,然后分别在main和test的子包中写java包和resources包。
在这里插入图片描述

package main.java.com.jsxs;

/**
 * @Author Jsxs
 * @Date 2023/8/1 16:09
 * @PackageName:main.java
 * @ClassName: Demo1
 * @Description: TODO
 * @Version 1.0
 */
public class Demo1 {
    public static void main(String[] args) {
        System.out.println("你好 Maven!");
    }
}

在这里插入图片描述

2.填充Pom.xml至项目中

如果我们普通的Java目录想要变成一个Maven项目,那么我们需要在Src同级目录下编写一个文件 pom.xml。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--  当前Maven的Pom对象版本  -->
    <modelVersion>4.0.0</modelVersion>
    <!--打包方式,web 工程打包为 war, java 工程打包为 jar-->
  	<packaging>war</packaging>
    <!--    归属ID-->
    <groupId>com.jsxs</groupId>
    <!--    项目名ID-->
    <artifactId>Maven_handle</artifactId>
    <!--    项目版本号 SNAPSHOT代表开发版 ,RELEASE代表完成版-->
    <version>0.0.1-SNAPSHOT</version>
    <!--    项目名称-->
    <name>Maven_handle</name>
    <!--    项目描述-->
    <description>Demo project for Maven_handle</description>

    <!--    依赖管理-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </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>

3.Maven 项目构建命令

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

在这里插入图片描述
其实这里分别对应着我们SpringBoot项目中的右侧功能栏目。

mvn compile #编译
mvn clean #清理
mvn test #测试 target 目录下 surefire-reports 有测试报告
mvn package #打包 只打包源程序
mvn install #安装到本地仓库
  1. 执行编译命令之后

在这里插入图片描述
在这里插入图片描述

  1. 执行清理的操作

在这里插入图片描述

在这里插入图片描述

  1. 执行测试

在这里插入图片描述
我们在target目录中可以看到我们的测试结果,都会被记录下来的
在这里插入图片描述

  1. 执行 打包

在这里插入图片描述

在这里插入图片描述

  1. 将我们的项目安装到本地仓库

在这里插入图片描述

在这里插入图片描述

4.使用插件创建Maven项目

(注意要用 命令行,不要用 powershell)

  1. 创建Java工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
  1. 创建 web 工程:
mvn archetype:generate -DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-webapp 
-Dversion=0.0.1-snapshot 
-DinteractiveMode=false

在这里插入图片描述

(五)、第一个Maven项目 (IDea)

1.配置 Maven

在这里插入图片描述

2.创建Maven项目

在这里插入图片描述
在这里插入图片描述

3.设置插件

打包web项目打包成war; java工程打包成jar。

    <!--  构建  -->
    <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>

在这里插入图片描述

(六)、依赖管理

1.依赖配置

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

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

2.依赖传递

就是说假如B项目使用了A项目本身的依赖,那么B项目将会拥有A项目所有的依赖,然而A项目是不变的。

在这里插入图片描述

依赖具有传递性:

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

在这里插入图片描述

依赖传递的冲突问题:

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

在这里插入图片描述

3.可选依赖 (被动断)

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

当我们配置完这一项之后,假如别人引入我们的项目依赖,那么不会存在延申的依赖的。比如说我们在项目A中引入项目B,项目B的pom.xml的文件中在junit这个依赖,然后加入optional之后,我们就在项目A中看不到B中的Junit这个依赖。

<optional>true</optional>
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<optional>true</optional>
</dependency>

在这里插入图片描述

4.排除依赖 (主动断)

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

项目3中不添加 optional,我们这里在项目2中直接进行排除的操作。

 <!-- 具体依赖-->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<!-- 排除集合 -->
	<exclusions>
		<!-- 排除某一个具体的 -->
		<exclusion>
			<!-- 三件套 : 版本号就不用写了,因为一排除,就是排除所有版本-->
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

我们也发现没存在 junit衍生的版本。
在这里插入图片描述

5.依赖范围

  • 依赖的 jar 默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围
  • 作用范围
    • 主程序范围内有效 (main 文件夹范围内
    • 测试程序范围内有效(test 文件夹范围内
    • 是否参与打包(package 指令范围内

在这里插入图片描述

6.依赖范围传递性

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

在这里插入图片描述

(七)、生命周期与插件

1.生命周期

Maven 构建生命周期描述的是一次构建过程中经历了多少个事件:
在这里插入图片描述

(1).Maven生命周期三阶段

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

在这里插入图片描述

(2).Clean 生命周期

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

(3).Default 生命周期

  • validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化) 初始化构建状态,比如设置属性值。
  • generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
  • process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
  • generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
  • process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
  • compile(编译) 编译项目的源代码。
  • process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  • generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
  • process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
  • generate-test-resources(生成测试资源文件) 为测试创建资源文件。
  • process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
  • test-compile(编译测试源码) 编译测试源代码到测试目标目录.
  • process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
  • test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
  • prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
  • package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、 WAR或者EAR文件。
  • pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
  • integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
  • post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  • verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
  • install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  • deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。
    在这里插入图片描述

(4).Site生命周期

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

2.插件

(1).插件的定义

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认 maven 在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其他功能

(2).插件的用列

eg: 我们自定义在test测试的时候,进行打包的操作。

    <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>
                        <phase>generate-test-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述
当我们点击生命周期的test的时候,我们发现帮助我们打成了一个jar包
在这里插入图片描述


(八)、分模块开发与设计

在实际开发中,dao、service、controller是不可能全部同时有一个人做的,也就是说我们的dao、service、contollrt是需要进行分包的操作的。
在这里插入图片描述

1.拆分springMvc_ssm项目

(1).ssm_pojo 拆分

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

(2).ssm_dao 拆分

在这里插入图片描述

  • 新建模块
  • 拷贝原始项目中对应的相关内容到 ssm_dao 中
    • 数据层接口 UserDao
    • 配置文件: 保留与数据层相关配置文件(3 个)
      • 注意:分页插件在配置中与 SqlSessionFactoryBean 绑定,需要保留
    • pom.xml: 引入数据层相关坐标即可,删除 springmvc 相关坐标
      • spring
      • mybatis
      • spring 整合 mybatis
      • mysql
      • druid
      • pagehelper
      • 直接依赖 ssm_pojo (对 ssm_pojo 模块执行 install 指令,将其安装到本地仓库)
        ssm_service 拆分

在这里插入图片描述

注意: 我们发现问题,我们发现我们的dao层项目中需要使用到实体类,但是我们的dao项目中没有放实体的项目,所以我们需要对原先的 ssm_pojo进行安装到本地的仓库,然后我们在ssm_dao层使用三件套引用即可。

(3).ssm_service 拆分

在这里插入图片描述

  • 新建模块
  • 拷贝原始项目中对应的相关内容到 ssm_service 模块中
    • 业务层接口与实现类 (UserService、UserServiceImpl)
    • 配置文件:保留与数据层相关配置文件(1个)
    • pom.xml: 引入数据库相关坐标即可,删除 springmvc 相关坐标
      • spring
      • junit
      • spring 整合 junit
      • 直接依赖 ssm_dao (对 ssm_dao 模块执行 install 指令, 将其安装到本地仓库)
      • 间接依赖 ssm_pojo(由 ssm_dao 模块负责依赖关系的建立)
    • 修改 service 模块 spring 核心配置文件名,添加模块名称, 格式:applicationContext-service.xml
    • 修改 dao 模块 spring 核心配置文件名,添加模块名称,格式:applicationContext-dao.xml
    • 修改单元测试引入的配置文件名称,由单个文件修改为多个文件

注意: 因为我们的service层是需要我们的ssm_dao层的接口和实现类的,所以我们需要在ssm_dao 进行 install的操作,又因为我们ssm_dao install ssm_pojo, 所以直接依赖ssm_dao,间接依赖ssm_pojo

(4).ssm_controller 拆分

在这里插入图片描述

  • 新建模板(使用 webapp 模板)
  • 拷贝原始项目中对应的相关内容到 ssm_controller 模块中
    • 表现层控制器类与相关设置类(UserController,异常相关)
    • 配置文件:保留与表现层相关配置文件(1个)、服务器相关配置文件(1个)
    • pom.xml:引入数据层相关坐标即可,删除 springmvc 相关坐标
      • spring
      • springmvc
      • jackson
      • servlet
      • tomcat 服务器插件
      • 直接依赖 ssm_service(对 ssm_service 模块执行 install 指令,将其安装到本地仓库)
      • 间接依赖 ssm_dao、ssm_pojo
    • 修改 web.xml 配置文件中加载 spring 环境的配置文件名称,使用 * 通配,加载所有 applicationContext- 开始的配置文件
      在这里插入图片描述

运行的话,我们只需要运行Controller即可。因为我们其他的资源都放在本地仓库了,所以不需要进行启动其他的业务即可。

(5).分模块开发小结

  • 模块仅包含当前模块对应的功能类与配置文件
  • spring 核心配置根据模块功能不同进行独立制作
  • 当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
  • web.xml 需要加载所有的 spring 核心配置文件

2.模块聚合

(1).多模块构建维护

在实际开发的过程中,我们会有很多模块,但是假如我们对一个模块进行更新后,其他模块不知到它更新。那么这个服务就会启动不起来。所以我们现在迫切需要一个统一的管理模块,负责管理我们的4个模块,当这个统一的模块更新的时候,这管理的所有模块都将一起进行更新,谁都不会落下

在这里插入图片描述

(2).聚合

  • 作用:聚合用于快速构建 maven 工程,一次性构建多个项目/模块。
  • 制作方式:
  1. 创建一个空模块,打包类型定义为 pom
  <!--定义该工程用于进行构建管理 -->
	<packaging>pom</packaging>
  1. 定义当前模块进行构建操作时关联的其他模块名称
	<!-- 管理的工程列表  -->
<modules>
	<!-- 具体的工程 -->
	<module>../ssm_controller</module>
	<module>../ssm_service</module>
	<module>../ssm_dao</module>
	<module>../ssm_pojo</module>
</modules>

注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关;

3.模块继承

(1).多模块继承

比如说: 在我们日常开发中,我们使用多模块开发的时候,会遇到如下的问题:“我们在开发一个SpringBoot项目会出现版本依赖的版本号不一致的问题,所以我们需要对我们所有使用的公共版本号进行统一管理,避免出现不兼容的问题”。

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

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

(2).继承

我们不仅可以对版本依赖的版本号可以进行统一的管理,而且我们也可以使用 插件管理器 对其进行版本控制。

  1. 父工程进行声明的操作
    <!-- 声明此处进行依赖管理-->
    <dependencyManagement>
        <!--    具体的依赖集合    -->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  1. 子工程和父工程进行联系
    <!--    给这个子工程进行指定其父工程的位置是哪个-->
    <parent>
        <!--     这里设置三件套   -->
        <artifactId>Maven_Idea</artifactId>
        <groupId>com.jsxs</groupId>
        <version>1.0-SNAPSHOT</version>
        <!--        这里我们需要指定父工程的pom.xml文件-->
        <relativePath>pom.xml</relativePath>
    </parent>
  • 在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
<dependencies>
	<!-- spring 环境 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
	</dependency>
</dependencies>

(3).继承的资源

在这里插入图片描述

(4).继承与聚合

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

4.属性

我们现在已经成功的解决了 父模块 与 子模块 之间的版本信息冲突的操作, 现在还存在着一种就是 父模块内部之间的版本依赖问题,比如说:“我们父工程内部使用mybatis与spring的时候要使用统一的版本号管理操作”

(1).自定义属性

  • 作用:等同于定义变量,方便统一维护
  • 定义格式:
    <properties>
        <!--        基本格式为:  技术名称.version-->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.version>5.1.9</spring.version>
    </properties>

使用格式

	<version>${spring.version}</version>

(2).内置属性

  • 作用:使用 maven 内置属性,快速配置
  • 调用格式:
${basedir}
${version}

(3).Setting 属性

  • 作用:使用 maven 配置文件 settings.xml 中的标签属性,用于动态配置
  • 调用格式
${settings.localRepository}

(4).Java 系统属性

  • 作用: 读取 Java 系统属性
  • 调用格式
${user.home}
  • 系统属性查询方式
mvn help:system

在这里插入图片描述

(5).环境变量属性

  • 调用格式
${env.JAVA_HOME}
  • 环境变量属性查询方式
mvn help:system

在这里插入图片描述

5.版本管理

(1).工程版本

  • SNAPSHOT (快照版本)
    项目开发过程中,为方便团队成员合作,解决模块间相互依赖和不时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
    快照版本会随着开发的进展不断更新。
  • RELEASE (发布版本)
    项目开发进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。

(2).工程版本号约定

  • 约定规范
    • <主版本>.<次版本>.<增量版本>.<里程碑版本>
    • 主版本:表示项目重大架构的变更,如: spring 5 相较于 spring 4 的迭代
    • 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞
    • 增量版本:表示有重大漏洞的修复
    • 里程碑版本:表明一个版本的里程碑(版本内部)。这样的版本
  • 范例
    5.1.9.RELEASE

6.资源配置

(1).资源配置多文件维护

也就是说: 我们需要通过 Maven 来配置 比如数据库 驱动器、密码、账户等其他类似的数据。
在这里插入图片描述

  1. 定义格式:
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
<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/>
  1. 调用格式
${jdbc.url}

在这里插入图片描述
在这里插入图片描述

(2).配置文件中读取pom属性值

  • 在配置文件中设置配置文件路径。
  • 开启加载pom属性过滤功能。
  • 使用${属性名}格式引用pom属性。

在这里插入图片描述

7.多环境开发配置

(1).多环境兼容

在这里插入图片描述

    <!--  1.  创建多环境-->
    <profiles>
        <!--    2.    定义具体的环境: 生产环境-->
        <profile>
            <!--      2.1      定义环境对应的唯一名称-->
            <id>pro_env</id>

            <!--        2.2    定义环境中专用的属性值-->
            <properties>
                <jdbc.url>jdbc:mysql://127.454545.1.1:3306/ssm_db</jdbc.url>
            </properties>

        </profile>

        <!--    3.    定义具体的环境: 开发环境-->
        <profile>
            <!--     3.1       定义环境对应的唯一名称-->
            <id>pro_dep</id>

            <!--      3.2      定义环境中专用的属性值-->
            <properties>
                <jdbc.url>jdbc:mysql://127.1.8888.1:3306/ssm_db</jdbc.url>
            </properties>
            <!--设置默认启动 ⭐-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

在这里插入图片描述

(2).加载指定环境

  • 作用:加载指定环境配置
  • 调用格式
mvn 指令 -P 环境定义id

例如:

mvn install –P pro_env

8.跳过测试

(1).使用命令跳过测试

  • 命令
  1. 整体模块功能未开发。
  2. 模块中某个功能未开发完毕。
  3. 单个功能更新调试导致其他功能失败。
  4. 快速打包。
mvn 具体指令 -D skipTests

eg: mvn install -D skipTest

(2).使用界面操作跳过测试

单机 test 之后,我们点击闪电的图标就会发现会有一个画线的操作
在这里插入图片描述

(3).使用配置跳过测试

<build>
<piugins>
<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>
<piugins/>
<build>

9.私服 (局部多台计算机共享)

在这里插入图片描述

(1). 安装 Nexus 服务器

  • Nexus 是 Sonatype 公司的一款 maven 私服产品
  • 下载地址:https://help.sonatype.com/repomanager3/download

在这里插入图片描述

(2).启动 Nexus 服务器

在这里插入图片描述

在这里插入图片描述

1. 服务器通过命令行进行启动的操作

nexus /run nexus

在这里插入图片描述
2.访问服务器(默认端口:8081)

访问Nexus的服务器: http://localhost:8081/

在这里插入图片描述

  • 修改基础配置信息

    • 安装路径下 etc 目录中 nexus-default.properties 文件保存有 nexus 基础配置信息,例如默认访问端口
    • 在这里插入图片描述
  • 修改服务器运行配置信息

    • 安装路径下 bin 目录中 nexus.vmoptions 文件保存有 nexus 服务器启动对应的配置信息,例如默认占用内存空间
      在这里插入图片描述

(3).私服资源获取

在这里插入图片描述

(4).仓库分类 (三种)

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

(5).可视化UI资源上传

  1. 登入我们的账号

在这里插入图片描述

  1. 仓库的分类图标

在这里插入图片描述

  1. 创建主机仓库

在这里插入图片描述
在这里插入图片描述

  1. 将我们创建的主机仓库放入 仓库组中

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 给指定的仓库添加文件

在这里插入图片描述
进行上传我们的组件的信息
在这里插入图片描述
寻找上传的jar包和自定义我们的三件套
在这里插入图片描述

查看是否上传成功
在这里插入图片描述

(6). 本地仓库访问私服

在这里插入图片描述

  1. 做好两个仓库,其中一个是开发版,另一个是稳定版。

在这里插入图片描述

  1. 在Maven的核心配置文件中添加访问的账户和密码 ⭐
  <!-- 配置访问私服的用户名和密码 -->
  <servers>
	<server>
		<id>heima-release</id>
		<username>admin</username>
		<password>xxx</password>
	</server>
	<server>
		<id>heima-snapshot</id>
		<username>admin</username>
		<password>xxx</password>
	</server>
</servers>
  1. 配置本地仓库镜像 ⭐

寻找我们的本地仓库位置
在这里插入图片描述

      <!-- 本地私服的仓库 -->
      <id>nexus-heima</id>
       <!-- 意味着所有资源全部在这里取 -->
      <mirrorOf>*</mirrorOf>
      <!-- 仓库的路径 -->
      <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>

在这里插入图片描述

(7).idea 访问私服与组件上传

  • 配置当前项目访问私服上传资源的保存位置 (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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringWeb项目核心功能总结

SpringWeb项目核心功能总结 文章目录 SpringWeb项目核心功能总结1.浏览器与Java程序的连接&#xff08;个人偏好使用RequestMapping&#xff09;2.参数的传入3.结果的返回请求转发和请求重定向的区别 核心功能用到的注解&#xff1a; RestControllerControllerResponseBodyRequ…

vr禁毒宣传展厅展馆为观众带来了沉浸式的真实体验

毒品是当今社会的一大毒瘤&#xff0c;给人们的生命和家庭带来了极大的伤害&#xff0c;禁毒教育一直是我们必须重视的一项工作。为了更好地宣传禁毒知识&#xff0c;我们不断地探索新的教育方式&#xff0c;其中&#xff0c;VR禁毒体验已经成为了一股新潮流。 三维网上展厅以数…

从《封神》中看动作捕捉对影视制作的作用

在电影《封神》中的角色雷震子不同于往常由真人演员化妆扮演&#xff0c;而是采用了动作捕捉技术&#xff0c;通过真人演员穿戴动作捕捉设备&#xff0c;实时动作捕捉数字角色进行演绎&#xff0c;让数字角色雷震子在电影中呈现出动作流畅、自然、形象逼真的精致画面效果&#…

果粉装机必备软件有哪些

作为一名从Windows全面切换到Mac的果粉&#xff0c;在一开始的时候确实感到诸多不便&#xff0c;比如文件管理器操作别扭&#xff0c;鼠标移动不够跟手等等。 后来才发现&#xff0c;除了游戏&#xff0c;大多数问题都能用软件来解决。Mac虽然小众&#xff0c;但是用户群体有很…

VScode : 过程试图写入的管道不存在

前言 由于这个问题比较常见&#xff0c;所以想记录一下。以下记录的问题都是我自己遇到的比较多的问题以及解决方案。 常见问题和解决方案 问题1.网段不一样 解决方案&#xff1a;通常服务器的网段是内网&#xff0c;自己如果远程连接&#xff0c;需要挂v&#xff0c;p&…

Azure Kinect DK使用教程

作者&#xff1a; Herman Ye Galbot Auromix 版本&#xff1a; V1.0 测试环境&#xff1a; Ubuntu20.04 更新日期&#xff1a; 2023/08/08 注1&#xff1a; 本文内容中的硬件由 Galbot 提供支持。 注2&#xff1a; Auromix 是一个机器人爱好者开源组织。 注3&#xff1a; 本文在…

安全防御(3)

1.总结当堂NAT与双机热备原理&#xff0c;形成思维导图 2.完成课堂nat与双机热备试验 引用IDS是指入侵检测系统&#xff0c;它可以在网络中检测和防御入侵行为。IDS的签名是指根据已知入侵行为的特征制定的规则&#xff0c;用于检测和警告可能存在的入侵行为。签名过滤器可以根…

怎么理解linux内核栈?

内核栈有不同含义。一是内核线程使用的栈&#xff0c;比如初始化线程&#xff0c;idle&#xff0c;kthread&#xff0c;这些仅在内核空间运行&#xff0c;只有内核栈&#xff0c;没有用户态以及用户空间栈。还有就是用户线程发生中断&#xff0c;系统调用进入内核态时候使用的栈…

linux下.run安装脚本制作

1、安装文件(install.sh) PS: .run安装包内部执行脚本文件 2、资源文件(test.zip) PS: 待安装程序源文件 3、制作.run脚本(install.run) cat install.sh test.zip > install.run chmod ax install.run

【单片机】DS2431英文手册,中文手册,翻译

DS2431是一款1024位的1-Wire EEPROM芯片&#xff0c;以每个256位的四个内存页面组织。数据被写入8字节的暂存区&#xff0c;经过验证&#xff0c;然后复制到EEPROM存储器中。作为一个特殊功能&#xff0c;四个内存页面可以单独地被写保护&#xff0c;或者被置于EPROM仿真模式&a…

ETHERCAT转CANOPEN协议网关canopen分类

1.产品功能 JM-ECT-COP是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 CANOPEN 网络连接起来。 本网关连接到 ETHERCAT 总线中做为从站使用&#xff0c;连接到 CANOPEN 总线中做为主站使用。 3.技术参数 ETHERCAT 技术参数 网关做为 E…

【论文阅读】基于深度学习的时序异常检测——TransAD

系列文章链接 数据基础&#xff1a;多维时序数据集简介 论文一&#xff1a;2022 Anomaly Transformer&#xff1a;异常分数预测 论文二&#xff1a;2022 TransAD&#xff1a;异常分数预测 论文链接&#xff1a;TransAD.pdf 代码库链接&#xff1a;https://github.com/imperial…

openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA

文章目录 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA34.1 语法格式34.2 参数说明34.3 示例 openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA SCHEMA又称作模式。通过管理SCHEMA&#xff0c;允许多个用户使用同一数据库而不相互干扰&#xff0c;可以将数据库对象…

1706. 球会落何处;875. 爱吃香蕉的珂珂;1914. 循环轮转矩阵

1706. 球会落何处 核心思想&#xff1a;判断什么时候球会被卡住&#xff0c;1&#xff0c;当球在最左边的时候&#xff0c;挡板是向左的。2&#xff0c;当球在最右边的时候&#xff0c;挡板是向右的。3&#xff0c;当球当前的挡板是向左的&#xff0c;但是同一行的另一个挡板是…

模仿火星科技 基于cesium+ 贴地测量+可编辑

当您进入Cesium的编辑贴地测量世界&#xff0c;下面是一个详细的操作过程&#xff0c;帮助您顺利使用这些功能&#xff1a; 1. 创建提示窗&#xff1a; 启动Cesium应用&#xff0c;地图场景将打开&#xff0c;欢迎您进入编辑模式。在屏幕的一角&#xff0c;一个友好的提示窗将…

MongoDB:Unrecognized option: storage

MongoDB一直显示 Unrecognized option: storage try ‘mongod --help’ for more information 意思是我们配置的config文件出了问题。 说明&#xff1a;MongoDB采用的是YAML格式&#xff0c;所以我们只需要稍微改改就好。 在storage前面&#xff1a;没有空格 下面两行最前面…

以肠道微生物群为新视角的研究和治疗癫痫

谷禾健康 在漫长的历史中&#xff0c;一种神秘而令人不安的疾病一直困扰着人类&#xff0c;那就是癫痫。 癫痫是最常见的神经系统疾病之一&#xff0c;影响着全世界近7000万人。它会导致突发性的、不可控制的、反复发作的痉挛和意识丧失。 突如其来的发病行为&#xff0c;不仅让…

Simulink仿真模块 - Rate Transition

Rate Transition处理以不同速率运行的模块之间的数据传输 在仿真库中的位置为:Simulink / Signal Attributes模型为: 双击模型打开参数设置界面为: 参数设置 Initial conditions:初始条件设置 此参数仅适用于慢速到快速转移。它指定当连接到 Rate Transition 模…

【Kubernetes】Kubernetes之kubectl详解

kubectl 一、陈述式资源管理1. 陈述式资源管理方法2. 基本信息查看3. 项目周期管理3.1 创建 kubectl create 命令3.2 发布 kubectl expose命令3.3 更新 kubectl set3.4 回滚 kubectl rollout3.5 删除 kubectl delete 4. kubectl 的发布策略4.1 蓝绿发布4.2 红黑发布4.3 灰度发布…

生态系统服务(InVEST模型)供给与需求、价值核算技术及人类活动、重大工程项目、自然保护区、碳中和等领域中实际案例分析

对接工作实际项目及论文写作&#xff0c;解决参会者关注的重点及实际项目过程问题&#xff0c;采取逐步延伸的逻辑&#xff0c;不论您是小白亦或是已经能够成功运行InVEST模型生成结果&#xff0c;您可以自由选择课程内容&#xff0c;如果您是小白老师手把手教您&#xff0c;如…