1. 概述

1.1. 项目集成jar的问题

项目中jar包资源越来越多,jar包的管理越来越沉重。常规的jar包管理主要存在以下的问题:

  • 繁琐:要为每个项目手动导入所需的jar,需要搜集全部jar
  • 复杂:项目中的jar如果需要版本升级,就需要再重新搜集jar
  • 冗余:相同的jar在不同的项目中保存了多份。

    1.2. 常用构建工具

    目前开发中常用的项目管理工具主要就是:Maven和Gradle。

  • Maven(/ˈmeɪvn/):Maven这个单词来自于意第绪语(犹太语),意为知识的积累。Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具。主要用来管理java项目,进行依赖管理(jar包依赖管理)和项目构建(项目编译、打包、测试、部署)。此外还能分模块开发,提高开发效率。

  • Gradle([ɡredl]):是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

    1.3. Maven的作用

    Maven是什么.png

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

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

    2. 下载和安装

    2.1. 下载

    官网http://maven.apache.org
    下载链接http://maven.apache.org/download.cgi

    2.2. 安装

    解压即安装。

    2.3. 环境变量配置

  • 依赖Java,需要配置JAVA_HOME(略)。

  • 设置Maven自身的运行环境,需要配置MAVEN_HOME。

    3. 基本概念

    3.1. 仓库

  • 仓库的作用:用于存储资源,包含各种jar包。

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

        私服的作用

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

3.2. 坐标

3.2.1. 什么是坐标?

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

3.2.2. Maven坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)。
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如:CRM、SMS)。
  • version:定义当前项目版本号。
  • scope:编译范围。
  • packaging:定义该项目的打包方式。

示例:

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.13.2</version>
  5. <scope>test</scope>
  6. </dependency>

3.2.3. Maven坐标的作用

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

3.3. 仓库配置

3.3.1. 本地仓库配置

Maven启动后,会自动保存下载的资源到本地仓库。默认位置(当前目录位置为登录用户名所在目录下的.m2文件夹中)。

  1. <localRepository>${user.home}/.m2/repository</localRepository>

自定义位置(当前目录位置为D:\dev\apache-maven-3..\repository文件夹中)。

  1. <localRepository>D:\dev\apache-maven-3.*.*\repository</localRepository>

3.3.2. 远程仓库配置

Maven默认连接的仓库位置:

  1. <repositories>
  2. <repository>
  3. <id>central</id>
  4. <name>Central Repository</name>
  5. <url>https://repo.maven.apache.org/maven2</url>
  6. <layout>default</layout>
  7. <snapshots>
  8. <enabled>false</enabled>
  9. </snapshots>
  10. </repository>
  11. </repositories>

3.3.3. 镜像仓库配置

在settings.xml文件中配置阿里云镜像仓库:

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

3.3.4. 全局配置 VS 用户配置

  • 全局配置(Global Settings):定义了当前计算机中Maven的公共配置(Maven安装目录:$M2_HOME),位于:$M2_HOME/conf/settings.xml。
  • 用户配置(User Settings):定义了当前用户的配置,位于:~/.m2/settings.xml。

    3.3.5. 配置优先级

    配置优先级从高到低:**pom.xml** > **User Settings** > **Global Settings**。如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。

    4. 相关术语

    4.1. Executable Jar

    Executable Jar(可执行的 jar 包),一般是指将所有依赖的jar包都放在一个Jar包内,这个Jar包包含了所有运行时需要依赖的Jar包代码,不过并没有规定这个“放”的方式,可以是将依赖的jar包直接放在入口jar包内,就像这样:

    1. ├─executable jar
    2. ├─META-INF
    3. ├─MANIFEST.MF
    4. ├─com...
    5. ├─lib
    6. ├─io.netty....jar
    7. ├─com.google....jar
    8. ├─org.polaris....jar
    9. ├─com.github....jar
    10. ├─org.apache.....jar

    也可以是将依赖的jar包内的文件给拷贝到入口的Jar包内,就像这样:

    1. ├─executable jar
    2. ├─META-INF
    3. ├─MANIFEST.MF
    4. ├─com...
    5. ├─io.netty.... classes
    6. ├─com.google.. classes
    7. ├─org.polaris.. classes
    8. ├─com.github.. classes
    9. ├─org.apache.. classes

    Spring Boot算是把Executable Jar传到了千家万户,Spring Boot中提供了一个Maven插件spring-boot-maven-plugin,这个插件可以将所有的Maven依赖Jar包在构建时打包到一个jar文件内,并且通过Spring Boot的ClassLoader和启动类,可以加载到这些Executable Jar包中的Jar包,就是上面介绍的第1种方式:将依赖的jar包直接放在入口jar包内。

    4.2. uber-jar

    在Maven的一些文档中我们会发现 **uber-jar**这个术语,许多人看到后感到困惑。其实在很多编程语言中会把super叫做uber (因为uber可能是关键字), 这是上世纪80年代开始流行的,比如管”superman”叫”uberman”。所以uber-jar从字面上理解就是super-jar,这样的jar不但包含自己代码中的class ,也会包含一些第三方依赖的jar,也就是把自身的代码和其依赖的jar全打包在一个jar里面了,所以就很形象的称其为super-jar 。

    4.3. FatJar

    在java中,通常将应用程序及其依赖jar一起打包到一个独立的jar中,就叫FatJar,它也叫uber-jar。

    4.4. Shade Jar/Shadow Jar

    shade机翻为阴影、遮蔽。shade jar是指将jar包及其依赖包打包到一个jar文件内,同时提供shade“遮蔽 / 重命名”某些依赖包的功能。比如一个Maven工程,依赖了很多三方包,但实际打包时你想重命名部分包,这个重命名的过程在这里可以叫shade。
    Maven中的Shade插件为 maven-shade-plugin,可以将程序打包成一个独立的Jar包,包含依赖包。另一款类似的Maven插件为 maven-assembly-plugin,也可以实现同样的效果,Gradle 中也有类似的插件 shadow,功能也很强大,也支持shade功能。

    5. 依赖管理

    5.1. 依赖配置

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

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

    示例:

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.projectlombok</groupId>
    4. <artifactId>lombok</artifactId>
    5. <version>1.18.20</version>
    6. <scope>provided</scope>
    7. </dependency>
    8. <dependency>
    9. <groupId>junit</groupId>
    10. <artifactId>junit</artifactId>
    11. <version>4.12</version>
    12. <scope>test</scope>
    13. </dependency>
    14. </dependencies>

    5.2. 依赖传递

    依赖具有传递性:

  • 直接依赖:在当前项目中通过依赖配置建立的资源关系。

  • 间接依赖:被资源的资源如果依赖其他资源,那么当前项目会间接依赖其他资源。

    5.3. 依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。

  • 声明优先:当资源在相同层级被依赖的时候,配置顺序靠前的覆盖配置顺序靠后的。
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。

依赖传递冲突问题.png

5.4. 可选依赖(不透明)

可选依赖指的是对外隐藏当前所依赖的资源。

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

5.5. 排除依赖(不需要)

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

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

5.6. 依赖范围

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

  • 主程序范围有效(main文件夹范围内)。
  • 测试程序范围有效(test文件夹范围内)。
  • 是否参与打包(package指令范围内)。 | scope | 主代码 | 测试代码 | 打包 | 范例 | | —- | —- | —- | —- | —- | | compile(默认) | √ | √ | √ | log4j | | test |
    | √ |
    | junit | | provided | √ | √ |
    | servlet-api | | runtime |
    |
    | √ | jdbc |

5.7. 依赖范围的传递性

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


compile test provided runtime
compile compile test provided runtime
test 不传递 不传递 不传递 不传递
provided 不传递 不传递 不传递 不传递
runtime runtime test provided runtime

6. 生命周期和插件

6.1. 构建生命周期

6.1.1. 项目构建生命周期

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

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

    6.1.2. clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作。

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

    6.1.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(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。

    6.1.4. site构建生命周期

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

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

    7. 聚合和继承

    7.1. 聚合

    聚合的作用:聚合用于快速构建Maven工程,一次性构建多个项目/模块。
  1. 创建项目,打包类型定义为pom

    1. <!-- 定义该工程用于进行构建管理 -->
    2. <packaging>pom</packaging>
  2. 定义当前项目进行构建操作时关联的其他模块名称。

    1. <!-- 管理的工程列表 -->
    2. <modules>
    3. <!-- 具体的工程名称 -->
    4. <module>maven-*-pojo</module>
    5. <module>maven-*-dao</module>
    6. <module>maven-*-service</module>
    7. <module>maven-*-web</module>
    8. </modules>

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

    7.2. 继承

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

  3. 在父工程中定义依赖管理。

    1. <!-- 声明此处进行依赖管理 -->
    2. <dependencyManagement>
    3. <!-- 具体的依赖 -->
    4. <dependencies>
    5. <!-- 自定义工程依赖 -->
    6. <!-- ...... -->
    7. <!-- spring的环境 -->
    8. <dependency>
    9. <groupId>org.springframework</groupId>
    10. <artifactId>spring-context</artifactId>
    11. <version>5.1.9.RELEASE</version>
    12. </dependency>
    13. <!-- Spring整合Junit -->
    14. <!-- ...... -->
    15. <!-- mybatis的环境 -->
    16. <!-- ...... -->
    17. <!--mysql环境-->
    18. <!-- ...... -->
    19. <!--spring整合jdbc-->
    20. <!-- ...... -->
    21. <!--spring整合mybatis-->
    22. <!-- ...... -->
    23. <!--druid连接池-->
    24. <!-- ...... -->
    25. <!--分页插件坐标-->
    26. <!-- ...... -->
    27. </dependencies>
    28. </dependencyManagement>
  4. 在子工程中声明其父工程坐标和对应的位置。

    1. <!-- 定义该工程的父工程 -->
    2. <parent>
    3. <artifactId>maven-pro</artifactId>
    4. <groupId>org.polaris</groupId>
    5. <version>1.0</version>
    6. <!-- 填写父工程的pom文件,如果是下面的这种格式,可以省略relativePath -->
    7. <relativePath>../pom.xml</relativePath>
    8. </parent>
  • 继承的资源

    • groupId:项目组ID,项目坐标的核心因素。
    • version:项目版本,项目坐标的核心因素。
    • description:项目的描述信息。
    • organization:项目的组织信息。
    • inceptionYear:项目的创始年份。
    • url:项目的URL地址。
    • developers:项目的开发者信息。
    • contributors:项目的贡献者信息。
    • distributionManagement:项目的部署配置。
    • issueManagement:项目的缺陷跟踪系统信息。
    • CIManagement:项目的持续集成系统信息。
    • scm:项目的版本控制系统。
    • malilingLists:项目的邮件列表信息。
    • properties:自定义的Maven属性。
    • dependencies:项目的依赖配置。
    • dependencyManagement:项目的依赖管理配置。
    • repositories:项目的仓库配置。
    • build:包括项目的源码目录配置i、输出目录配置、插件配置、插件管理配置等。
    • reporting:包括项目的报告输出目录配置、报告插件配置等。

      7.3. 聚合和继承的异同点

  • 作用

    • 聚合用于快速构建项目。
    • 继承用于快速配置。
  • 相同点
    • 聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
    • 聚合和继承均属于设计型模块,并无实际的模块内容。
  • 不同点

    • 聚合是站在父模块的角度,通过模块中配置关系,父模块可以感知到参与聚合的子模块有哪些。
    • 继承是站在子模块的角度,通过模块中配置关系,父模块无法感知哪些子模块继承了自己。

      8. 属性

      8.1. 自定义属性

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

  • 定义格式

    1. <!-- 定义自定义属性 -->
    2. <properties>
    3. <spring.vresion>5.1.9.RELEASE</spring.vresion>
    4. <mybatis.version>3.5.3</mybatis.version>
    5. </properties>
  • 调用格式

    1. <!-- 声明此处进行依赖管理 -->
    2. <dependencyManagement>
    3. <!-- 具体的依赖 -->
    4. <dependencies>
    5. <!-- spring的环境 -->
    6. <dependency>
    7. <groupId>org.springframework</groupId>
    8. <artifactId>spring-context</artifactId>
    9. <version>${spring.vresion}</version>
    10. </dependency>
    11. <!-- mybatis的环境 -->
    12. <dependency>
    13. <groupId>org.mybatis</groupId>
    14. <artifactId>mybatis</artifactId>
    15. <version>${mybatis.version}</version>
    16. </dependency>
    17. </dependencies>
    18. </dependencyManagement>

    8.2. 内置属性

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

  • 调用格式:

    1. ${basedir}
    2. ${version}

    8.3. Settings属性

  • 作用:使用Maven配置文“settings.xml”中的标签属性,用于动态配置。

  • 调用格式:

    1. ${settings.localRepository}

    8.4. Java系统属性

  • 作用:读取Java系统属性。

  • 调用格式:

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

    1. mvn help:system

    8.5. 环境变量属性

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

  • 调用格式:

    1. ${env.JAVA_HOME}
  • 环境变量属性查询方式:

    1. mvn help:system

    9. 版本管理

    9.1. 工程版本

  • SNAPSHOT(快照版本):

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

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

      9.2. 工程版本号的约定

      约定规范:<主版本>.<次版本>.<增量版本>.<里程碑版本>。
  • 主版本:表示项目重大架构的变更,如Spring5相较Spring4的迭代。

  • 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞。
  • 增量版本:表示有重大漏洞的修复。
  • 里程碑版本:表示一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相对,相对来说不是很稳定,有待更多的测试。

示例:5.1.9.RELEASE。

10. 资源配置

资源配置中的资源包括properties文件、applicationContext.xml文件等。 资源配置其实就是将properties、applicationContext.xml等文件中的信息配置到Maven中,由Maven统一管理,这样就可以在任意文件中加载pom文件中定义的属性了。
示例:

  • jdbc.properties

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=${jdbc.url}
    3. jdbc.username=root
    4. jdbc.password=******
  • pom.xml ```xml

    jdbc:mysql://localhost:3306/maven?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true

org.apache.tomcat.maven tomcat7-maven-plugin 2.1 80 / ${project.basedir}/src/main/resources true ${project.basedir}/src/test/resources true

  1. <a name="d7150679"></a>
  2. # 11. 多环境开发配置
  3. <a name="a444326f"></a>
  4. ## 11.1. 多环境开发
  5. ![多环境兼容.png](https://cdn.nlark.com/yuque/0/2021/png/788484/1635929861931-8830e262-be22-4c91-ac6d-c13e3082814b.png#clientId=uf670a0fa-08a7-4&from=ui&id=u182b1e00&name=%E5%A4%9A%E7%8E%AF%E5%A2%83%E5%85%BC%E5%AE%B9.png&originHeight=330&originWidth=569&originalType=binary&ratio=1&size=21638&status=done&style=none&taskId=ud0fed9fb-dec6-4d83-ae1e-ca8dee88297)
  6. <a name="4546ee4c"></a>
  7. ## 11.2. 多环境配置
  8. - **pom.xml**
  9. ```xml
  10. <!-- 创建多环境 -->
  11. <profiles>
  12. <!-- 定义具体的环境:开发环境 -->
  13. <profile>
  14. <!-- 定义环境对应的唯一id -->
  15. <id>dev_env</id>
  16. <!-- 定义环境中专用的属性值 -->
  17. <properties>
  18. <jdbc.url>jdbc:mysql://localhost:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
  19. </properties>
  20. <!-- 设置默认启动 -->
  21. <activation>
  22. <activeByDefault>true</activeByDefault>
  23. </activation>
  24. </profile>
  25. <!-- 定义具体的环境:测试环境 -->
  26. <profile>
  27. <id>test_env</id>
  28. <properties>
  29. <jdbc.url>jdbc:mysql://127.0.0.1:3306/maven?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true&amp;nullCatalogMeansCurrent=true</jdbc.url>
  30. </properties>
  31. </profile>
  32. </profiles>

11.3. 加载指定环境

  • 作用:加载指定环境配置。
  • 命令:

    1. mvn 指令 -P 环境定义id
  • 示例:

    1. mvn install -P test_env

    12. 跳过测试

    12.1. 跳过测试环境的应用场景

  • 整体模块功能未开发。

  • 模块中某个功能未开发完毕。
  • 单个功能更新调试导致其他功能失败。
  • 快速打包。

    12.2 跳过测试

    1. 使用命令跳过测试

    ```shell

    格式:mvn 指令 -D skipTests

示例

mvn install -D skipTests

  1. 注意:执行的指令生命周期必须包含测试环节。
  2. <a name="d452a870"></a>
  3. ### 2. IDEA中使用界面跳过测试
  4. ![IDEA中使用界面跳过测试.png](https://cdn.nlark.com/yuque/0/2021/png/788484/1635934724195-90c19cba-7ab7-4b87-884e-8a436656126e.png#clientId=uf670a0fa-08a7-4&from=ui&id=u7811f0b3&margin=%5Bobject%20Object%5D&name=IDEA%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%95%8C%E9%9D%A2%E8%B7%B3%E8%BF%87%E6%B5%8B%E8%AF%95.png&originHeight=423&originWidth=828&originalType=binary&ratio=1&size=25998&status=done&style=none&taskId=u3789526d-82e3-4ed8-85b7-36abe5171f8)
  5. <a name="2a145946"></a>
  6. ### 3. 使用配置跳过测试
  7. ```xml
  8. <build>
  9. <!-- 使用配置跳过测试 -->
  10. <plugins>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-surefire-plugin</artifactId>
  14. <version>2.22.1</version>
  15. <configuration>
  16. <!-- 开启跳过测试 -->
  17. <skipTests>true</skipTests>
  18. <!-- 包含指定的测试用例 -->
  19. <includes>
  20. <include>**/User*Test.java</include>
  21. </includes>
  22. <!-- 排除指定的测试用例 -->
  23. <excludes>
  24. <exclude>**/User*TestCase.java</exclude>
  25. </excludes>
  26. </configuration>
  27. </plugin>
  28. </plugins>
  29. </build>

13. 私服

13.1. Nexus

Sonatype公司的一款Maven私服产品。

  • 下载地址

  • Nexus-2.X:默认账号口令为admin/admin123。

  • Nexus-3.x:默认账号为admin,密码存储于${nexu_home}\sonatype-work\nexus\admin.password文件。

    1. cd nexus-3.30.1-01
    2. # 启动服务器
    3. nexus.exe /run nexus

    WebUI:http://localhost:8081

  • 配置更新

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

      13.3. 仓库的分类

  • 宿主仓库hosted:保存无法从中央仓库获取的资源。

    • 自主研发。
    • 第三方非开源项目。
  • 代理仓库proxy:代理远程仓库,通过nexus访问其它公共仓库,例如:中央仓库。
  • 仓库组group

    • 将若干个仓库组成一个群组,简化配置。
    • 仓库组不能保存资源,属于设计型仓库。

      13.4. 登录Nexus

      点击右上角“Sign in”进行登录,在弹出的界面会提示admin用户的初始密码位置,根据提示即可获取密码信息。输入账户口令后,建议勾选“Disable anonymous access”,禁用匿名访问。

      13.5. 创建仓库

      创建仓库1.png
      创建仓库2.png
      创建仓库4.png

      13.6. 将创建的仓库放入到maven-public仓库组中

      1.png
      2.png
      3.png

      13.7. 手动上传组件

      1.png
      2.png
      3.png
      4.png

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

      1. 概述

      IDEA环境中资源上传和下载概述.png

      2. 本地仓库访问私服

      配置本地仓库访问私服的权限(settings.xml)。
      1. <servers>
      2. <!-- 配置访问服务器的权限 -->
      3. <server>
      4. <id>polaris-snapshots</id>
      5. <username>admin</username>
      6. <password>123456</password>
      7. </server>
      8. <server>
      9. <id>polaris-release</id>
      10. <username>admin</username>
      11. <password>123456</password>
      12. </server>
      13. </servers>
      配置本地仓库资源来源(settings.xml)。
      1. <mirrors>
      2. <mirror>
      3. <id>alimaven</id>
      4. <name>aliyun maven</name>
      5. <mirrorOf>central</mirrorOf>
      6. <url>
      7. http://maven.aliyun.com/nexus/content/groups/public/
      8. </url>
      9. </mirror>
      10. <!-- 配置本地仓库资源来源 -->
      11. <mirror>
      12. <id>nexus</id>
      13. <mirrorOf>*</mirrorOf>
      14. <name>本地私服</name>
      15. <url>http://localhost:8081/repository/maven-public/</url>
      16. </mirror>
      17. </mirrors>

      3. IDEA访问私服和组件上传

      配置当前项目访问私服上传资源的保存位置(pom.xml)。
      1. <!-- 发布配置管理 -->
      2. <distributionManagement>
      3. <snapshotRepository>
      4. <id>polaris-snapshots</id>
      5. <url>http://localhost:8081/repository/polaris-snapshots/</url>
      6. </snapshotRepository>
      7. <repository>
      8. <id>polaris-release</id>
      9. <url>http://localhost:8081/repository/polaris-release/</url>
      10. </repository>
      11. </distributionManagement>
      发布资源到私服的命令:
      1. mvn deploy

      13.9. 把第三方依赖放入本地仓库或者私服

  • 第三方依赖放入本地仓库

    1. mvn install:install-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar
  • 第三方依赖放入私服

Maven的settings配置文件中配置第三方仓库的server信息。

  1. <server>
  2. <id>polaris-snapshots</id>
  3. <username>admin</username>
  4. <password>admin123</password>
  5. </server>

执行命令:

  1. mvn deploy:deploy-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Durl=http://localhost:8081/repository/polaris-snapshots -DrepositoryId=polaris-snapshots

参考

语雀:Maven基础
https://www.yuque.com/fairy-era/yg511q/xdugky