maven基础及高级应用

2 篇文章 0 订阅
2 篇文章 0 订阅

Maven发音/meven/

Maven是什么?
比较正式的定义是:Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来定义在生命周期阶段中插件目标的逻辑。

Maven能做什么?
1.帮我们管理各种引用到的jar包
2.帮我们将代码编译成二进制字节码文件
3.可以管理一个包下面的所有单元测试文件,直接知道哪些单元测试是有问题的
4.把项目打包好,部署项目,生成Web站点

maven依赖管理概念
maven依赖管理概念

依赖管理:maven工程对jar包的管理过程,实现了代码的可重用

maven一键构建的概念
在maven项目中有一个pom.xml文件,里面就是存放的maven依赖jar包坐标
在电脑cmd中进入一个maven项目目录,运行命令,mvn tomcat:run + 回车就可以得到一个链接运行

maven安装
bin目录:这个目录下主要是用mvn构建项目
lib目录:这个目录主要是放的一些maven自身所依赖的jar包
具体安装步骤看另一篇博客
安装成功如下(打开cmd 运行mvn -v )
安装成功

仓库的种类和彼此关系
在maven\conf\settings.xml文件,这个文件里面有可以配置本地依赖仓库
默认是Default: ${user.home}/.m2/repository,即C盘下
仓库的种类和彼此关系

中央仓库几乎放置了所有开源的jar包
中央仓库如下:
中央仓库

公司中一般有自己的远程仓库(也叫私服)
默认情况下,会在本地找jar包,然后会去中央仓库找jar包(联网情况下)
公司:会在本地找jar包,没有去远程仓库(私服)中找,没有再去中央仓库里面找

建议重新指定本地仓库的地址
(然后把程序常用依赖的jar包放入这个本地仓库)

maven标准目录结构
1.核心代码部分
2.配置文件部分
3.测试代码部分
4.测试配置文件
在这里插入图片描述

传统项目:只有一个src目录,没有统一规范
maven标准目录结构:
src/main/java目录 核心代码部分
src/main/resources 配置文件部分
src/test/java目录 测试代码部分
src/tess/resources 测试配置文件
src/main/webapp 页面资源,js,css,图片等等(如果是一个web项目)

maven常用命令
mvn clean // 清除项目编译信息,把文件中target目录删除(target目录里面放置的是字节码文件)公司中接手别人的项目通常要把别人项目中的target目录删除,因为这是在别人环境下的字节码文件,可能自己环境用不了

mvn compile //文件目录中生成target目录(也就是编译的意思,产生target文件)

mvn test //在target文件目录下生成test字节码(也就是会把测试文件执行以及main下面的代码)

mvn package //打包,生成target,把mian和test代码都进行了编译,打成了一个war包(在set文件中可以设置打包成其他包)

mvn install //安装,生成target,mian和test代码编译,打包了,并且打包到了本地仓库
在这里插入图片描述

maven生命周期
mavn有一件构建的功能(包含了编译compile,测试test,打包package,安装install,发布deploy(执行这个命令之前是需要进行一些配置的))
1.清理生命周期(clean)
2.默认生命周期(编译compile,测试test,打包package,安装install,发布deploy)
3.站点生命周期(自己了解,实际项目开发用的不多)

maven概念模型图
maven概念模型图
在idea中创建一个maven工程:
idea自动集成了maven(确保自己电脑上已经安装好了maven)
可以在idea中设置maven路径(自己装maven的路径),jar包路径(本地放jar包的路径),seting.xml配置文件路径
其中也可以设置runner属性,在vm options中填-DarchetypeCatalog=internal
作用:有些时候电脑没联网,不能下载jar包,但是配置了这个,只要曾经下载到jar包仓库过,就能够在不联网的情况下也能够使用,直接从本地仓库拿

使用idea创建一个java工程
可以使用idea提供的骨架
maven骨架

填写坐标
1.Groupid:组织名称
2.Artifactid: 项目名称
3.version:版本
也可以不使用骨架
也可以创建一个webapp项目
其中webapp就是一个资源包
如果本地没有这个jar包,可以打开浏览器去访问maven中央仓库网址,去寻找需要的jar包

maven工程servlet实例之jar包冲突解决?
maven有一个一键构建功能,就是不再使用本地安装的Tomecat
而是使用maven自身集成的Tomecat插件对项目进行构建
错误:这里就会出现一个包冲突的错误,就是本地的tomecat中的jar包和macen集成的tomecat中的jar包冲突了
解决办法:maven可以让一个jar包添加scope属性,即添加作用域,让它只是在写代码的时候起作用
关于pom.xml这是个maven配置文件
在这个标签里面的是一个所使用到的jar包
在这个标签里卖弄的是maven自身所用到插件<例如自身带的tomcat>

maven的java工程取mysql数据库数据(自己可以试着写一写)

maven基础回顾

maven是一个项目管理工具

依赖管理:
maven对项目中jar包的管理过程,传统工程我们直接把jar包放置在项目中。
maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标

仓库的种类:本地仓库,远程仓库(私服),中央仓库(本地maven自动连着中央仓库)

仓库之间的关系:当我们启动一个maven工程的时候,maven工程会通过pom文件中的jar包坐标去本地仓库找对应的jar包,如果本地仓库没有,maven工程会自动去中央仓库下载jar包到本地仓库。
在公司中,如果本地没有对应的jar包,会先从私服下载jar包。如果私服也没有jar包,可以从中央仓库下载,也可以从本地上传。

一键构建:
maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。

maven常用的命令:
clean,compile,test,package(打包成target),install(放入本地jar包),deploy,

三套生命周期:清理生命周期,默认生命周期,站点生命周期

maven工程要导入jar包,就必须要考虑jar包冲突
解决jar包冲突方式一:

第一声明的jar包优先原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的
先声明的jar包坐标下的依赖包,可以优先进入项目中。

maven导入jar包中的一些概念
直接依赖:项目中直接导入的jar包,就是项目中的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去

解决jar包冲突方式二:
路径近者优先原则,直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖

解决jar包冲突方式三:(推荐使用)
直接排除法:直接使用exclusion排除掉某个jar包下的依赖包
当我们要排除某个jar包下的依赖包,在配置exclusion标签的时候,内部可以不写版本号,因为此时依赖包使用的版本和默认和本jar包一样

在开发中,通常会有一个jar包导入的做一个规范,以便于解决jar包冲突
在pom文件中,通常会有
这个标签
这个标签

有些还会有,这是把jar包版本锁定(只是起到锁定jar包的作用,没有导入jar包的作用,所以要锁定jar包,需要在锁定一份,还需要dependenc一份)
maven工程是可以分父子依赖关系的
凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖。
比如,当前A(spring 5)项目,被B项目(spring 4)依赖,那么我们A项目中所有的jar包都会传递到B项目中。B项目开发者,如果再再B项目中导入一套ssm框架的jar包,对B项目是直接依赖,那么直接依赖的jar包就会把我们A项目传递过去的jar包覆盖掉。
为了防止以上情况出现,我们可以把A项目中主要jar包的坐标锁住,那么其他依赖该项目的项目中,即便是有同名的jar包直接依赖,也无法覆盖。

有些还会有标签,这里面是放置的一些key值,起到方便管理jar包版本的作用,在dependency中可以引用这里面的值

这里写了一个spring项目,自己还没有学习到,所以没办法笔记
dao层,service层,web层

maven工程拆分与聚合的思想
拆分:把我们的项目拆分为多个零散的项目
聚合:把100个项目中寻找有用的模块直接拿过来组装在一起
maven工程拆分与聚合的思想

maven父子工程的创建

1.父工程选project和module都无所谓,最重要的是获得父模块的pom文件
可以直接把maven父工程的src目录删除

2.然后在父工程目录上右键点击创建一个module字工程
像dao层没有到web页面,所以不用选骨架(创建pom完成多了一个父标签,然后有自己的artifactID)然后在父工程的pom文件中也自动多了一个modules标签
像service层也不需要骨架
像web层肯定要使用骨架webapp(pom文件多余的可以删除,因为使用了骨架,然后要保留打包方式和artifactid)
然后父子工程就创建完成

区分一些概念
工程和模块的区别:
一个误区:工程不等于完整的项目,模块也不等于一个完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目,和此项目是工程和模块没有关系

工程天生只能使用自己内部资源,工程天生是独立的,后天可以和其他工程或模块建立关联关系
模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用

父子工程之间:子模块天生集成父工程,可以使用父工程所有资源
子模块之间天生是没有任何关系的,但是可以建立联系dependens

父子工程直接不用建立关系,继承关系是天生,不需要手动建立

平级直接的引用叫依赖,依赖不是先天的,依赖需要后天建立的

传递依赖下来的包是否能用?
传递依赖下来的包是否能用

了解即可

maven父子工程三种启动方式
1.直接在父工程maven项目中找到tomcat7:run然后运行

在这里插入图片描述

2.如果在子工程中run运行,会发现找不到service层,因为service没有打包到本地仓库

在这里插入图片描述

3.使用本地安装的tomcat来运行

在这里插入图片描述

私服安装(了解)
应用方向:
如何让上传jar到私服
私服的安装和启动
私服的应用
安装第三方jar包到本地仓库
安装第三方jar包到私服

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值