Maven的概述和使用(超详细)

  • Post author:
  • Post category:其他




1 Maven的概述



1.1 maven的概念

Maven是项目进行模型抽象,充分运用面向对象的思想,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

  • Maven是由Apache开发的一个工具。用来管理java项目, 依赖管理(jar包的管理),项目构建

特点:擅长管理大项目,自动管理开发者需要的包,自动进行下载我们需要的jar包



1.2 maven的作用

  • 依赖管理: maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中
  • 项目构建: maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行
  • maven对工程分模块构建,提高开发效率



1.3 maven的概念模型

  • 项目对象模型。POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包,本工程的坐标,打包运行方式
  • 依赖管理系统(基础核心)。maven通过坐标对项目工程所依赖的jar包统一规范管理
  • maven定义一套项目生命周期。清理,初始化,编译,测试。报告,打包,部署,站点生成。
  • 一组标准集合。maven工程有自己标准的工程目录结构,定义坐标有标准
  • maven管理项目生命周期都是基于插件完成的,例如开发中使用的tomcat插件



1.4 maven仓库

仓库名称 作用
本地仓库 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
中央仓库 就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2/
远程仓库(私服) 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven须要下载构件的时候。它从私服请求,假设私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
  • 仓库存放的内容:
  1. Maven自身运行所需要的插件
  2. 第三方框架(spring/mybatis/springmvc)和工具类的jar包
  3. 我们自己开发的maven项目安装后的jar包



1.5 maven的坐标

  1. Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。在Maven中,不论什么一个依赖、插件或者项目构建的输出, 都能够称之为

    构件
  2. 为了能自动化的解析任何一个Java构件. Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的

    坐标


    坐标的定义元素如下:
  • groupId:项目组织唯一的标识符,实际对应JAVA的包的结构(一般写公司的组织名称 例如:com.itheima,com.alibaba)
  • artifactId: 项目的名称
  • version:定义项目的当前版本

    在这里插入图片描述



2 maven的安装



2.1 本地安装



2.2 IDEA整合本地maven


使用软件版本号


在这里插入图片描述

  1. 在IDEA中找到Configure,进入setting

    在这里插入图片描述
  2. 在搜索框输入maven,在maven中设置配置文件目录和仓库存储目录

    在这里插入图片描述
  3. 在配置文件settings.xml中,添加下载源,采用国内的远程仓库,可加快maven项目在线下载速度

    在这里插入图片描述
  4. 解决创建项目慢的问题

    在这里插入图片描述



3 IDEA创建maven工程



3.1 创建一个空工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建后的空项目

在这里插入图片描述



3.2 创建跳过骨架的java项目


在空项目的基础上创建跳过骨架的java项目


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建完成

在这里插入图片描述

跳过骨架创建maven项目的项目目录结构最标准



3.3 创建有骨架的java项目

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

创建后的目录结构,相对标准的目录结构少了,resources文件目录

在这里插入图片描述
添加resources目录

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

在这里插入图片描述



3.4 创建有骨架的web项目

在这里插入图片描述

2.
在这里插入图片描述

3.
在这里插入图片描述

4.
在这里插入图片描述

5.新建成的有骨架的web项目缺少很多目录

在这里插入图片描述

6.按照上续创建resources目录的方法补全后:

在这里插入图片描述



4 maven项目中pom.xml的初略介绍

在这里插入图片描述

。。。。。。。。。。。。。。。。。。。。。



5 maven的常见指令

在这里插入图片描述



5.1 clean命令

清除编译产生的target文件内容,可以配合相应命令一起使用,如:mvn clean package。

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


target目录被清除了


在这里插入图片描述



5.2 compile命令

该命令可以对src/main/java目录进行编译,生成.class文件

在这里插入图片描述



5.3 test命令

测试命令:一键测试src/test/java 下Junit的测试用例,减少挨个测试方法的麻烦

在这里插入图片描述

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

在这里插入图片描述



5.4 package命令



5.4.1 对java项目打包

在这里插入图片描述



5.4.2 对web项目打包

在这里插入图片描述


修改包名:


在这里插入图片描述



5.5 install命令

打包后将其安装到本地仓库

在这里插入图片描述


安装完毕后,可以在本地仓库中找到 对应的项目


在这里插入图片描述



6 依赖



6.1 maven插件

maven是一个核心引擎,提供了基本的项目处理能力和建设过程的管理,以及一系列的插件是用来执行实际建设任务。

maven插件可以完成一些特定功能。例如:集成jdk插件可以方便的修改项目的编译环境;集成tomcat插件后,无需安装tomcat服务器就可以运行tomcat进行项目的发布和测试。在pom.xml中通过plugin标签引入maven的功能插件



6.1.1 jdk编译版本的插件

<!-- java编译插件 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

在这里插入图片描述

在这里插入图片描述



6.1.2 tomcat插件

<!-- 配置Tomcat插件 -->
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <!--配置端口号-->
        <port>80</port>
        <!--配置项目路径-->
        <path>/day1003</path>
    </configuration>
</plugin>

在这里插入图片描述


运行:


在这里插入图片描述

tomcat 插件注意问题: Maven的中央仓库中只有tomcat7.X版本,如果想使用tomcat8.X版本,需要从第三方仓库查找或者使用idea集成外部的tomcat插件



6.2 导入依赖



6.2.1 导入Junit坐标

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

即可进行代码测试



6.2.2 导入servlet的依赖

导入servlet的坐标依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>



6.3 依赖的范围

依赖除了坐标之外,还有和标签用于标记此依赖的作用范围

用图说话:

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



6.4 继承



6.4.1 创建父模块和子模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


删除src目录,父目录只用来作pom.xml文件的继承

在这里插入图片描述


父模块的依赖包:

如果依赖版本不存在,可点击自动导入

在这里插入图片描述


创建子模块


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


子模板继承父模板依赖


在这里插入图片描述



6.5 版本管理


方便后期更改jar包和插件的版本,通常要提取出来


在这里插入图片描述



6.6 依赖管理

子模块虽然可以继承父模块所有的jar包, 但是 子模块只需要使用一个jar包, 把所有的jar包都给子模块是否合理?

添加标签

父模板:

在这里插入图片描述

添加管理后,父模板将不显示依赖


在这里插入图片描述


子模版:


在这里插入图片描述

子模版如果需要父模板的依赖,添写坐标的和依赖名即可,无需添加版本号,版本号统一由父模块管理

如果子模块不需要父模块的版本号的依赖,自行修改即可,依赖会优先使用近的依赖,如下图

在这里插入图片描述



6.7 排除依赖

这里拿子模块2为例,子模块2引入了子模块1的依赖,但需排除子模块1中的mysql依赖

引入标签

在这里插入图片描述

在这里插入图片描述



6.8 聚合



6.8.1 问题一安装子模版时报错

**原因:**因为父模板未安装,子模版找不到父模板的安装依赖

在这里插入图片描述

**解决方式:**先安装父模板即可

在这里插入图片描述



6.8.2 问题二如果有很多子模块,一个一个安装太麻烦

**解决方式:**使用聚合

聚合目的: 可以快速构建一个项目的多个模块

父模块的pom文件文件:

在这里插入图片描述

在这里插入图片描述



7 一些常见问题

1 tomcat插件重复启动:导致端口占用

2 index.html放到WEB-INF下面,导致访问不到这个html页面

3 名称不叫index.html,结果直接输入localhost:8080,访问不到这个页面



版权声明:本文为weixin_44449054原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。