Maven——大厂项目必备管理工具,从入门到精通!【❤️建议收藏❤️】

简介: Maven——大厂项目必备管理工具,从入门到精通!【❤️建议收藏❤️】

目录


一、Maven简介


二、Maven下载与安装


三、Maven基本概念


(一)仓库


(二)坐标


四、手工制作一个Maven项目


五、 IDEA生成Maven项目


六、 依赖管理


七、生命周期与插件


八、分模块开发与设计


九、聚合


十、继承


十一、属性


十二、版本管理


1.工程版本:


2.工程版本号约定


十三、资源配置


十四、多环境开发配置


十五、跳过测试


十六、私服


一、Maven简介

(一)传统项目管理状态分析


1.jar包不统一,jar包不兼容


2.工程升级维护过程繁琐


(二)Maven是什么?


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


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


image.png

(三)maven的作用:

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

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

3.统一开发结构:提供标准的、统一的项目结构

image.png

二、Maven下载与安装

 (一)Maven下载

下载地址:Maven – Download Apache Maven

image.png

(二)Maven安装

Maven属于绿色版软件,解压即安装

image.png

bin目录:maven所有可运行的指令,其中有个mvn,实际上运行的就是这个文件,打开此文件可以看出需要配置以下环境

image.png

boot目录:里面有个jar包,是maven的类加载器

image.png

config目录:maven的配置文件

lib目录:maven所依赖的jar包

剩下的为协议、注意

(三)Maven环境变量配置

1.依赖Java,需要配置JAVA_HOME

2.设置MAVEN自身的运行环境,需要配置MAVEN_HOME

image.png

3.测试环境配置结果   指令:mvn -version

image.png

三、Maven基本概念

(一)仓库

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

image.png

仓库分类:


本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源


远程仓库:非本机电脑上的仓库,为本地仓库提供资源

               1.中央仓库:Maven团队维护,存储所有资源的仓库

               2.私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

私服的作用:

       1.保存具有版权的资源,包含购买或自主研发的jar,中央仓库中的jar都是开源的,不能存储具有版权的资源

       2. —定范围内共享资源,仅对内部开放,不对外共享


(二)坐标

什么是坐标?

Maven中的坐标用于描述仓库中资源的位置 Central Repository:

Maven坐标主要组成

       groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)


       artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)

       version:定义当前项目版本号

       packaging:定义该项目的打包方式


Maven坐标的作用

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


在setting文件中配置阿里云的镜像坐标

<mirrors>
  <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> 
</mirrors>

四、手工制作一个Maven项目

Maven工程目录结构:

image.png

在src同层目录下创建pom.xml

image.png

Maven项目构建命令

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

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

image.png

五、 IDEA生成Maven项目

image.png

例:使用原型创建web项目,添加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> 
      </configuration>
    </plugin> 
  </plugins>
</build>

六、 依赖管理

1.依赖配置

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

格式:

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

2.依赖传递

依赖具有传递性,包括直接传递和间接传递。

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

间接传递:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

image.png

依赖传递的冲突问题:路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

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

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


3.可选依赖


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


<dependency>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <!--添加下面这一行-->
  <optional>true</optional>
</dependency>

4.排除依赖

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

<dependency>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <exclusions>
    <exclusion>
      <groupId></groupId>
      <artifactId></artifactId>
    </exclusion>
  </exclusions>
</dependency>

5.依赖范围

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

作用范围:

主程序范围有效(main文件夹范围内)

测试程序范围有效(test文件夹范围内)

是否参与打包(package文件夹范围内)

image.png

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

image.png

七、生命周期与插件

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



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

clean:清理工作      生命周期:pre-clean ===>clean ===>post-clean

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

image.png

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


生命周期:pre-site ===>site ===>post-site ===>site-deploy


插件:

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


默认maven在各个生命周期上绑定有预设的功能


通过插件可以自定义其他功能

<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>

八、分模块开发与设计

将一个项目分成多个模块开发(pojo,dao,service,controller)

image.png

九、聚合

image.png

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

制作方式:创建一个空模块,打包类型定义为pom

<packaging>pom</packaging>

定义当前模块进行构建操作时关联的其他模块名称

<modules>
  <module>模块地址</module>
  <module>模块地址</module>
  <module>模块地址</module>
  <module>模块地址</module>
</modules>

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

十、继承

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

制作方式:在子工程中生命其父工程坐标与对应的位置

<!--定义该工程的父工程-->
<parent>
  <groupId></groupId>
  <artifactId></artifactId>
  <version></version>
  <!--填写父工程的pom文件-->
  <relativePath>父工程pom文件地址</relativePath>
</parent>

在父工程中定义依赖管理

<!--声明此处进行依赖管理-->
<dependencyManagement>
  <!--具体的依赖-->
  <dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId></artifactId>
      <version></version>
    </dependency>
  </dependencies>
</dependencyManagement>

继承依赖使用:在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本

<dependencies>
  <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
  </dependency>
</dependencies>

继承的资源:

image.png

聚合与继承的异同点:


作用:聚合用于快速构建项目,继承用于快速配置

相同点:

聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

聚合与继承均属于设计型模块,并无实际的模块内容


不同点:


聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些

继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己


十一、属性

1.自定义属性


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

定义格式:

<!--定义自定义属性-->
<properties> 
  <spring.version>5.1.9.RELEASE</spring.version>
  <junit.version>4.12</junit.version>
</properties>

调用格式:

<dependency> 
  <groupId>org.springframework</groupId> 
  <artifactId>spring-context</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

5.环境变量属性

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

调用格式:

${env.JAVA_HOME}

环境变量属性查询方式:

mvn help:system

十二、版本管理

1.工程版本:

SNAPSHOT(快照版本)


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

2.快照版本会随着开发的进展不断更新


RELEASE(发布版本)


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


2.工程版本号约定

1.  <主版本>.<次版本>.<增量版本>.<里程碑版本>

2.  主版本:表示项目重大架构的变更,如: spring5相较于spring4的迭代


3.  次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞增量版本:表示有重大漏洞的修复

4. 里程碑版本:表明一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试


十三、资源配置

配置文件引用pom属性

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

调用格式

${地址}

开启配置文件加载pom属性

<!--配置资源文件对应的信息-->
<resources>
  <resource>
    <!--设定配置文件对应的位置目录,支持使用属性动态设定路径-->
    <directory>地址</directory>
    <!--开启对配置文件的资源加载过滤-->
    <filtering>true</filtering>
  </resource>
</resources>

image.png

四、多环境开发配置

<!--创建多环境-->
<profiles>
  <!--定义具体的环境:生产环境-->
  <profile>
    <!--定义环境对应的唯一名称-->
    <id>开发环境名称1</id>
    <!--定义环境中的专用的属性值-->
    <properties>
      <jdbc.url>jdbc链接</jdbc.url>
    </properties>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <!--定义具体的环境:开发环境-->
  <!--格式同上-->
</profiles>

image.png

加载指定环境配置:

调用格式:mvn 指令 -p 环境定义id

范例: mvn install -p pro_env

十五、跳过测试

使用命令跳过测试:mvn 指令 -D skipTests

注意:执行的指令生命周期必须包含测试环节

使用配置跳过测试:

image.png

十六、私服

1.Nexus下载:Download

启动服务器命令:nexus.exe /run nexus

启动完成

image.png

修改基础配置信息:

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

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

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


2.仓库分类


宿主仓库hosted

       保存无法从中央仓库获取的资源

                       1.自主研发

                       2.第三方非开源项目

代理仓库proxy

       代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库

仓库组group

       将若干个仓库组成一个群组,简化配置

       仓库组不能保存资源,属于设计型仓库


3.资源上传


上传资源时提供对应的信息

1.保存的位置(宿主仓库)             2.资源文件           3.对应坐标


4.访问私服配置(本地仓库访问私服)


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

image.png

配置本地仓库资源来源(setting.xml)

image.png

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

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

image.png

发布资源到私服的命令

mvn deploy


相关文章
|
26天前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
40 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
1月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
129 8
|
1月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
101 3
|
2月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
177 1
Maven——创建 Spring Boot项目
|
2月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
49 1
如何使用 maven 创建一个 Spring Boot项目
|
2月前
|
Java Maven Android开发
eclipse创建maven项目
本文介绍了在Eclipse中创建Maven项目的步骤,包括打开Eclipse、选择Java项目、完成项目创建以及自动下载插件的过程。
116 2
eclipse创建maven项目
|
2月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
93 1
|
2月前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
167 2
|
2月前
|
Java 应用服务中间件 Maven
【终极解决方案】IDEA maven 项目修改代码不生效。
【终极解决方案】IDEA maven 项目修改代码不生效。
470 1
|
2月前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
365 0