【Maven基础篇】Maven的安装依赖管理生命周期
创始人
2024-05-25 00:29:54

文章目录

  • 一、Maven简介
  • 二、下载与安装
  • 三、Maven基础概念
  • 四、第一个Maven项目(手工制作)
  • 五、第一个Maven项目(IDEA生成)
  • 六、依赖管理
  • 七、生命周期与插件

一、Maven简介

传统项目管理现状:
传统项目管理
基于以上问题,Maven出现了。

Maven介绍

  • Maven的本质是一款工具,做项目管理的工具
  • 将项目开发和管理过程抽象成一个项目对象模型POM,及Project Object Model

Maven做依赖管理的结构

Maven的作用

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

二、下载与安装

下载

Maven下载地址:https://maven.apache.org/download.cgi
下载

安装

解压zip文件(Maven属于绿色版软件,解压即安装)

在这里插入图片描述

打开文件夹后,各目录的解释:

在这里插入图片描述

环境变量的配置

  • 依赖Java,配置JAVA_HOME
  • 设置Maven自身的运行环境,配置MAVEN_HOME
    在这里插入图片描述
    在这里插入图片描述

做完以上,打开cmd窗口,输入mvn,以下即是配置成功
在这里插入图片描述

三、Maven基础概念

仓库

仓库,用于存储各种资源。简单狭义的讲,存jar包的

仓库如上图:

  • 本地仓库,即我本地计算机中保存的jar包。

  • 工作中,需要某jar包,我们可以去远端的某台服务器上去下载,即中央服务器,对应存储jar包的位置,就叫中央仓库,这个仓库是Maven开发团队服务维护的。

  • 但如果每个人都去中央仓库下载,再加上境外、带宽等因素,下载效率必然很低。由此,私服诞生,这是公司自己的仓库,一般为局域网级别。


在这里插入图片描述

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

☀☀☀
私服的作用:

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

坐标

在这里插入图片描述

坐标,用来描述仓库中资源的位置,https://repo1.maven.org/maven2/

weizhi
Maven坐标的主要组成:

  • 组织ID
  • 项目ID
  • 版本号

坐标

鉴于Maven坐标的组成方式,这样搜索是不对的,再者,Maven坐标是给Maven工具用的,它会按照我们提供的坐标去查找、下载、使用这个资源。

坐标的获取:

进入https://mvnrepository.com/,搜索关键字,锁定后选择版本号
在这里插入图片描述
复制Maven下的地址即坐标:
在这里插入图片描述


junitjunit4.13test

仓库配置

  • 本地仓库配置

在cmd窗口执行mvn后,可以看到在C盘下新增了这个目录,即本地仓库的位置
在这里插入图片描述
更改本地仓库的位置,需要修改配置文件,即安装Maven的conf目录下的settings.xml文件

本地仓库

  • 远程仓库的配置

和本地仓库一样,在setting.xml文件中加入以下配置,用阿里云提供的开源仓库代替maven的中央仓库:


nexus-aliyuncentralNexus aliyunhttp://maven.aliyun.com/nexus/content/groups/public

(到此对镜像的理解又加深了,即和镜子对面的本体一样,但又有其自身的灵活性和优势)

添加在这里:
远程仓库配置
到此,关于仓库的配置,从哪儿下载,下载好以后存本地的哪儿,就都写明白了。

全局setting和用户setting

以上的配置即全局setting,定义了当前计算机中Maven的公共配置,而用户setting即针对每个登录用户,可以做自己的个性化配置。

用户setting
在上面用户的maven目录下,和repository同级的地方复制一份setting文件过来,公共配置和全局setting中的不一样时,用户setting覆盖全局setting

四、第一个Maven项目(手工制作)

  • Maven工程目录结构

Maven的工程结构如图:
工程结构

  • 代码准备

照着以上的目录结构,在本地某盘中新建出一个同样结构的目录,在main目录的java文件夹下新建Demo.java:
在这里插入图片描述

package com.llg;public class Demo{public String say(String name){System.out.println("hello!" + name);return "hello!" + name;}
}

同样在test目录下的java文件夹下,写一个DemoTest.java的测试程序:

package com.llg;import org.junit.Test;
import org.junit.Assert;public class DemoTest{@Testpublic void testSay(){Demo d = new Demo();String ret = d.say("maven");Assert.assertEquals("hello!maven",ret);}
}

在src目录下新建pom.xml文件,文件内容如下:
文件内容

  • 手动构建指令

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

  • mvn compile 编译
  • mvn clean 清理编译出来的结果
  • mvn test 测试
  • mvn package 打包
  • mvn install 安装到本地仓库

打开DOS窗口,
cmd
在这里插入图片描述
在cmd窗口输入指令mvn compile



运行结果报这个错误的时候,是maven的setting文件中写的jdk版本的问题,解决参考这篇https://blog.csdn.net/qq_45737419/article/details/106790054

error



编译成功如下图:
success
在这里插入图片描述
cmd窗口执行指令mvn clean,则刚才编译产生的文件夹target就被删除了

mvn clean

执行mvn test,结果中可以看到:执行成功1个,失败0个,跳过0个

test

接下来执行mvn package来进行打包:

在这里插入图片描述
在target目录下,可以看到打包成功的jar包:

在这里插入图片描述
接下来执行mvn install,将上一步打好的jar包安装到我们本地的仓库。

在这里插入图片描述

☀30个常用的Maven指令:
https://zhuanlan.zhihu.com/p/29208926

使用mvn插件创建Maven工程

手动创建Maven项目的时候,按照以上一步步去创建目录,再各种新建文件,流程繁琐。可以使用mvn插件直接创建Maven工程。

对于 Maven 插件而言,为了提高代码的复用性,通常一个 Maven 插件能够实现多个功能,每一个功能都是一个插件目标,即 Maven 插件是插件目标的集合。我们可以把插件理解为一个类,而插件目标是类中的方法,调用插件目标就能实现对应的功能。

指令
在cmd窗口执行以上指令创建项目,对比Java工程和web工程在结构上的区别:

在这里插入图片描述

五、第一个Maven项目(IDEA生成)

在IDEA中创建一个空的工程,取名maven-project:
在这里插入图片描述
接下来配置maven,先选择project的SDK:
在这里插入图片描述
接下来file–setting,搜索maven:
在这里插入图片描述
修改home path和setting文件的路径,点击apply。这里的maven版本选择低一些,比如3.6.1,低版本下载地址https://archive.apache.org/dist/maven/maven-3/
在这里插入图片描述

点击新建模块java001,效果如图:
在这里插入图片描述
修改pom文件的内容,添加依赖junit:
在这里插入图片描述
写java源程序Demo和测试程序DemoTest:

在这里插入图片描述

点击右侧生命周期管理,进行测试、编译等:
在这里插入图片描述
除了右侧,也可在这里配置相关的操作:

在这里插入图片描述
可以看到编译测试等操作均成功运行:
在这里插入图片描述



接下来使用IDEA的模板来快速创建Maven工程:


同样新建一个模块,搜索quick,选择quickstart,点击Next:

在这里插入图片描述
接下来一路next后点击Finish,等待下载完成:

在这里插入图片描述

点击新建目录,创建resources,Make Directory as:
在这里插入图片描述



接下来创建Web项目:

继续点击IDEA右上角快捷创建模块,选择maven,搜索web:
在这里插入图片描述
接下来一路next–finish–OK,然后等待加载:

这里加载可能会卡住或者超级慢,可以考虑这三个解决帖子:
https://blog.csdn.net/xwhokay/article/details/122930149
https://blog.csdn.net/qq_38723677/article/details/124795928
https://blog.csdn.net/Zlucien/article/details/114671636

成功后项目结构如下:
在这里插入图片描述
根据自己的需要再修改一下即可:
在这里插入图片描述



下面是Tomcat插件安装和web工程的启动:

进入maven坐标库,搜索tomcat maven,进入这个:
在这里插入图片描述
进入后选择第一项就是需要的插件:
在这里插入图片描述
选择2.1版本后,复制坐标:
在这里插入图片描述


org.apache.tomcat.maventomcat7-maven-plugin2.1

然后进入pom.xml文件,使用build标签来添加插件:
在这里插入图片描述
这时查看右侧Maven可以看到插件(标红是因为正在下载,稍等刷新)
在这里插入图片描述
双击tomcat7:run,开始运行:
在这里插入图片描述
启动成功:

在这里插入图片描述



到此,整体说明一下pom文件各个参数的含义。pom.xml文件的模板:

4.0.0com.winner.tradetrade-core1.0.0-SNAPSHOTjar...com.winner.tradetrade-test1.0.0-SNAPSHOTtestfalseorg.slf4jslf4j-apiUTF-81.51.5...
    myPorjectName    ${basedir}/target      install        ../filter.properties                resources    true    src/main/resources      **/*.properties  **/*.xml        jdbc.properties                              ${basedir}\src\main\java    ${basedir}\src\main\scripts      ${basedir}\src\test\java    ${basedir}\target\classes    ${basedir}\target\test-classes                        org.apache.maven.wagon  wagon-ssh  2.8              maven-assembly-plugin  2.5.5          assembly    package      single      false          ${finalName}  false  assembly.xml        false      ...      true              ...    


六、依赖管理

依赖配置

依赖配置即当前项目运行所需的jar包,一个项目可以设置多个依赖

com.winner.tradetrade-test1.0.0-SNAPSHOTtestfalseorg.slf4jslf4j-api

依赖传递

项目1需要用到项目2,则在pom文件中复制项目2自身的坐标,写到项目1的中,则2中依赖的jar包,1也可以用了

在这里插入图片描述
图示:
在这里插入图片描述
依赖传递途中,出现了两个不同版本的同一个jar包,优先级理论如下:
在这里插入图片描述
理解就行,工作时刷新右侧Maven,出来哪个自然就是哪个生效了。

可选依赖(不透明)

即,引用我的人看不到我是否用了这个依赖。不想让别人知道我用过这个资源。


false

java001引用java002,本来可以看到2中引用了log4j:
在这里插入图片描述
被引用的2不想让别人知道引用了log4j,则加optional:
在这里插入图片描述
总结即:被引用方隐藏自己依赖的部分jar

排除依赖(不需要)

即:主动断开依赖的资源,这时不用写版本,三坐标中的version不用

org.slf4jslf4j-api

引用方001,默认可以看到被引用的002的依赖关系,如log4j:
在这里插入图片描述
接下来引用方001来主动排除002中的依赖:

在这里插入图片描述

可选依赖是控制这个资源会不会被引用方看到,排除依赖是引用方去主动断开这个依赖

依赖范围

依赖的jar默认在任何地方都可以使用,可以通过scope标签来更该其作用范围

在这里插入图片描述
标签内容取值如下表:
在这里插入图片描述
依赖范围具有传递性:
在这里插入图片描述

七、生命周期与插件

生命周期,即人几岁的时候,插件即在几岁的时候干的某件事

构建生命周期

项目构建的整体生命周期如下:
在这里插入图片描述

phase标签中填入以下哪个值,则该值及之前的过程全部执行:
在这里插入图片描述

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


插件

在这里插入图片描述

使用build标签来添加插件:

在这里插入图片描述
execution标签即执行,phase标签即说明插件在哪个阶段执行,goal标签的取值说明:
在这里插入图片描述
jar 用于将项目的主要源代码捆绑到 jar 存档中。

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...