史上最快Maven速成——一篇文章搞定Maven工具,三小时让你的项目构建直接起飞!!!

本文详细介绍了Maven的意义、作用及核心概念,包括其自动化构建流程、目录结构、POM、坐标、依赖管理、仓库、生命周期、继承与聚合。通过实例演示了Maven项目的搭建、运行及配置,强调了依赖的传递性、版本管理和仓库的使用。此外,还讲解了如何在IDEA中配置Maven,以及如何通过Maven命令进行构建。最后,探讨了Maven在大型项目中的重要性和优势,如简化构建过程、统一依赖管理,提高开发效率。
摘要由CSDN通过智能技术生成

Maven的意义

  • 庞大的项目开发中手动导包耗时耗力
  • 可以将一个项目拆分成多个工程
  • 将jar包保存在仓库中,需要时直接调用,快速高效(所有正规可靠的jar包已经存放在Maven仓库中)
  • jar包的下载浪费开发者的时间(需要筛选辨别)
  • 有些技术的官网是通过Maven或SVN专门的工具来提供下载的
  • jar包之间相互依赖,有些依赖关系很复杂。Maven会自动导入依赖jar包

Maven是什么

Maven是一款服务于Java平台的自动化构建工具

构建:
[1]原理:基于Java源文件、HTML页面、图片等基础信息动态合成一个运行的项目的过程
[2]过程:清理➟编译➟测试 ➟报告 ➟打包 ➟安装 ➟部署

清理:将旧的编译class文件删除
编译:将Java源码编译成Class文件
测试:自动调用Junit程序测试
报告:测试结果
打包:动态WEB工程打成war包,Java工程打成jar包
安装:Maven中将打包得到的文件复制到“仓库”中指定位置
部署:将动态web工程生成的war包复制到Servlet容器中运行

Maven的调用

1、Maven的下载
官网地址:https://maven.apache.org/download.cgi在这里插入图片描述2、具备运行时环境

  • 运行时环境:其实是一组jar包的引用
    在这里插入图片描述
  • 检查JAVA_HOME环境变量
    在这里插入图片描述
  • 配置Maven相关环境变量
    [1]MAVEN_HOME或M2_HOME
    在这里插入图片描述
    [2]Path
    在这里插入图片描述

3、查看maven的版本
在这里插入图片描述4、Maven仓库的下载
新建文件夹repmaven(maven—repository),可以放在解压的maven文件下,或者其他目录(记住目录路径)

  • 进入maven目录conf配置setting.xml
    在这里插入图片描述

  • 添加repmaven路径,即仓库位置
    在这里插入图片描述

  • 为了增加下载速度,可以利用国内阿里的镜像文件下载
    在这里插入图片描述

  • 分别配置id、mirrorOf、name、url四个标签里面的内容
    在这里插入图片描述ps:切记要把blocked去掉否则下一步执行报错

  • 进入cmd输入mvn help:system,出现以下截图内容成功
    在这里插入图片描述在这里插入图片描述

5、IDEA中Maven的配置
在这里插入图片描述 6、新建一个Maven项目
在这里插入图片描述 7、执行Maven命令
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

常用Maven命令

执行与构建过程相关的Maven命令,必须进入到pom.xml所在的目录
与构建过程相关:编译、测试、打包……

常用命令:

  • mvn clean:清理
  • mvn compile:编译主程序
  • mvn test-compile:编译测试程序
  • mvn tets:执行测试
  • mvn package:打包
  • mvn install:安装
  • mvn site:生成站点

Maven联网下载

一般下载到本地家目录中的是Maven核心程序,但是有时需要用到Maven的一些特定插件,在本地核心程序无法找到插件程序时,会自动连接外网到中央仓库下载。如果此时无法连接外网,则构建失败!

Maven的核心

1. 约定目录结构
2. POM
3. 坐标
4. 依赖
5. 仓库
6. 生命周期/插件/目标
7. 继承
8. 聚合

(1)第一个Maven程序

1、约定目录结构
[1]根目录:工程名
[2]src目录:源码
[3]pom.xml文件:Maven工程核心配置文件
[4]main目录:存放主程序
[5]test目录:存放测试程序
[6]java目录:存放Java源文件
[7]resource目录:存放框架或者其他工具配置文件
2、目录结构的重要性
自动化构建中若是目录结构混乱不统一,Maven无法实现识别源文件,无法进行自动化配置
约定 > 配置 > 编码

(2)POM

[1]含义:Project Object Model 项目对象模型
例如:DOM Document Object Model 文档对象模型

[2]pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
例如:web.xml对于WEB工程的作用

(3)坐标

使用三个向量在仓库中唯一定位一个Maven工程
[1]groupid:公司或组织域名倒叙+项目名
[2]artifactid:模块名
[3]version:版本

gav坐标和仓库的关系
举个栗子:

<groupId>org.apache.commons</groupId>
<artifactId> commons-lang3</artifactid>
<version>3.7</version>

对应目录结构:org\apache\commons\commons-lang3\3.7\commons-lang3-3.7.jar(jar包的命名=artifactid+version)

(4)依赖

Maven解析依赖信息时回到本地的仓库查找被依赖的jar包

基础用法:对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库

依赖的范围scope
在这里插入图片描述[1]compile

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:参与
  • 是否参与部署:参与

[2]test

  • 对主程序是否有效:无效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与
  • 是否参与部署:不参与

[3]provided

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与
  • 是否参与部署:不参与

1、依赖的传递性:在一个项目中导入的jar包会自动导入到相关的项目中
但是对于test和provided不存在传递性
2、依赖的排除:对于附属的不稳定的jar包,人为想要排除该jar包
在哪个工程中实现排除就在哪个工程中实现

<exclusions>
    <exclusion>
        <groupId></groupId>
        <artifactId></artifactId>
    </exclusion>
</exclusions>  

3、依赖的原则:解决模块工程之间的jar包冲突问题,路径最短者优先(jar包传输到项目的距离),路径相同时,先声明者(dependency标签声明顺序)优先。
4、统一管理依赖的版本:手动逐一修改不可靠
建议配置方式:
[1]使用properties标签内使用自定义标签统一声明版本号

<properties>
    <ly.spring.version>4.0.0.RELEASE</ly.spring.version>
</properties>

[2]在需要统一版本的位置,使用${自定义标签}引用声明的版本号

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${ly.spring.version}</version>
</dependency>

(5)仓库

仓库的分类:
[1]本地仓库:当前电脑上部署的仓库,为当前电脑Maven工程服务
[2]远程仓库:

  • 私服:当前局域网环境下,为当前局域网内的Maven工程服务
  • 中央仓库:架设在Internet上,为世界所有的Maven工程服务
  • 中央仓库的镜像:分担中央仓库的容量,提升访问速度,就近访问

仓库中保存的内容:
[1]Maven自身所需要的插件
[2]第三方框架或者工具的jar包
[3]我们自己开发的Maven工程

(6)生命周期

1、各个环节 执行的顺序:不能打乱,按照既定顺序执行
2、Maven核心的程序中定义了抽象的生命周期,生命周期中各个阶段的任务是由Maven插件完成的
3、Maven有三套相互独立的生命周期,分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作
  2. Default ifecycle 构建的核心部分 ,编译、测试、打包、安装、部署等等
  3. Site lifecycle 生成项目报告,站点,发布站点

4、Maven核心为了更好的实现自动化构建,不论程序处于生命周期的哪个阶段,都是需要从生命周期的最初阶段开始执行,直至该阶段执行
5、各个阶段的插件和目标
[1]生命周期的各个阶段仅仅定义了需要执行的任务是什么
[2]各个阶段和插件目标是对应的
[3]相似的目标由特定的插件来完成

生命周期阶段插件目标插件
compilecompilemaven-compiler-plugin
test-compiletestCompilemaven-compiler-plugin

(7)继承

问题:由于test范围的依赖由于无法传递,所以会分散在各个模块中,很容易造成版本不统一,影响团队工作。

解决方案:将junit依赖统一提取到“父工程”中,在“子工程”中声明依赖时不指定版本,以“父工程”为准.

操作步骤:
[1]创建一个Maven工程作为父工程,注意打包方式pom

<groupId>org.example</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

[2]在子工程中声明对父工程的引用

<parent>
    <groupId>org.example</groupId>
    <artifactId>MavenProject</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--基于当前文件的父工程的相对路径-->
    <relativePath>../MavenProject/pom.xml</relativePath>
</parent>

[3]将子工程的坐标与父工程坐标中重复的内容删除
在这里插入图片描述
[4]在子工程中统一junit依赖

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

[5]在子工程中删除junit依赖的版本号部分

注意:配置继承后,执行安装命令时要先安装父工程

(8)聚合

作用:一键安装各个模块工程
配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块

<!--配置聚合-->
<modules>
<!--    指定各个子工程的相对路径-->
    <module>../hi</module>
    <module>../hello</module>
</modules>

使用方式:pom.xml -> mvn install

Maven项目搭建

(1)基础maven项目

直接建立maven基础项目

  • 修改pom.xml文件,添加一些常用配置。
  • 使用UTF-8进行编码
  • 统一源代码与编译输出的JDK版本,一般使用JDK1.8进行开发
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
        <plugins>
            <!-- Compile -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <source>1.8</source>
                </configuration>
            </plugin>
       </plugins>
</build>
  • 转换为web项目
    1.在main目录下,添加webapp目录。
    2.在webapp目录下,添加WEB-INF目录。
    3.在WEB-INF目录下,添加web.xml文件。
    4.基于 Servlet3.0框架,在web.xml中添加代码。
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
</web-app>
  • 添加Java Web的maven依赖
    1.需要指定项目用war打包,所以添加配置
    2.添加 Servlet、JSP、JSTL等依赖
<packaging>war</packaging>

<!-- Servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

<!-- JSP -->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>

<!-- JSTL -->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

使用quick-start构建原型
在这里插入图片描述

(2)基于maven的JAVAWEB项目

选用webapp模板创建新项目

  • 建立项目
    在这里插入图片描述
  • 完善项目结构
    在这里插入图片描述

Maven项目运行

(1)手动运行

将项目通过package命令打成war包,将war包放置在Tomcat中webapps目录下,运行win窗口,Catalina run运行Tomcat服务器,通过浏览器本地访问,即可访问项目。

(2)自动运行

<!--配置当前工程构建过程的特殊设置-->
    <build>
        <finalName>ly</finalName>
<!-- 配置构建过程中需要使用的插件-->
        <plugins>
            <plugin>
                <!--cargo是一家专门从事“启动Servlet容器”的组织-->
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.3</version>
                <!--针对插件进行的配置-->
                <configuration>
            <!--配置系统中容器的位置-->
                    <container>
                        <containerId>tomcat6x</containerId>
                        <home>E:\ly\JAVA_EE jar包\apache-maven-3.8.1</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>E:\ly\JAVA_EE jar包\apache-maven-3.8.1</home>
<!--                        如果Tomcat端口默认值为8080则不必设置该属性-->
<!--                        <properties>-->
<!--                            <cargo.servlet.port>8989</cargo.servlet.port>-->
<!--                        </properties>-->
                    </configuration>
                </configuration>

        <!-- 配置插件在什么情况下执行-->
                <executions>
                    <execution>
                        <id>cargo-run</id>
                        <!-- 生命周期阶段-->
                        <phase>install</phase>
                        <goals>
                            <!-- 插件目标-->
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Maven整合依赖信息

Maven库网站:http://mvnrepository.com/搜索需要的jar包依赖信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值