文章目录
一、Maven简介
maven仓库:
https://mvnrepository.com/
1、什么是Maven
2、作用
1)管理项目
2)管理jar包解决依赖
3)自动化构建
二、安装、配置Maven
下载路径:
https://maven.apache.org/download.cgi
1、配置镜像仓库
配置多个镜像仓库id不能一样,id要唯一,id自定义。
mirrors类似拦截器,拦截对远程仓库的请求,把请求的重定向到配置的url.
repositoryid
换成**表示匹配所有maven仓库请求
所有的请求都转到下面的url中
即就是请求都去访问下面的url,从阿里云镜像仓库去拉取需要的jar包
name自定义
2、配置本地仓库
中央仓库:远程中央仓库
本地仓库:从中央仓库下载jar包存放的位置,在本地指定目录。
镜像仓库:对某一仓库做了镜像,阿里云镜像仓库。
私服:在局域网搭建的服务器,maven服务器。
三、创建Maven项目
A.可以直接用maven创建java项目
1…基本操作:
先在本地磁盘创建一个文件夹mavenproject
直接在C:\ZTools\maven\mavenproject文件下输入cmd,直接弹出命令框,直接跳到该目录的路径下
- 创建Java项目:mvn archetype:generate
7是创建Java项目,10是创建web项目
groupid是公司域名加项目名
即创建好java项目
2.执行maven操作
首先要进到test的项目中
在命令行输入命令:
mvn compile,编译后有class文件,编译会用到的插件maven-status
mvn package
java打包是打成jar包,web项目是打成war包
jmeter有些功能没有,自己实现过后。
最常用的地方是beanshell的地方,因为它的界面不方便写代码,先在idea处先写好打成jar包,放 在jmeter下ext的lib目录下放自己的jar包,自己引入jar包
mvn clean
清理删除target目录
清除前
清除后
B.工具创建maven的话集成maven更方便
四、Maven核心命令
1.常用命令:
C:\ZTools\maven\com\zhou\mvpro\test\1.0-SNAPSHOT
mvn install是把创建的项目放到本地仓库里C:\ZTools\maven 跟配置一样
com\zhou\mvpro groupid
model是test
版本号是1.0-SNAPSHOT
这样安装为什么要install?
在本地其他model引用model
就需要去本地仓库找
再去远程仓库找
deploy发布
发布到远程中央仓库
远程中央仓库需要密码,一般也不会推到中央仓库,不安全。
一般推送到私服下,本地调试把他推送到本地仓库。
2.Maven生命周期详解
一个项目build的过程。
要经过编译、测试、打包、安装
分为三套
1.clean做清理工作,target删除掉。
执行的时候多个命令:mvn clean package …
2.default,主要的是compile,test,package,install
3.site主要是站点创建
特点:三个生命周期是独立的,执行default的命令不会去执行clean里的命令
如果一个生命周期有多个命令(一个命令就是一个build的过程),执行一个独立的生命周期里命令,他的其他命令也是会执行。
常用的是前面两个生命周期的命令。
mvn clean package
五、在IDEA中使用Maven
1.idea集成maven
idea–File --settings–搜索maven
2.idea创建maven项目
File–new -Project–Empty Project
File–new -Module-Maven
颜色区分设置
1、点击File–>project structure…
2、Modules–>Sources–>main右键–>New Folder, 输入resources
3、选中右键Mark Directory as
用maven命令创建的项目pom是黄色,需要将其变成蓝色的设置选中pom,右键选择–Add as Maven Project
自动生成target目录
maven用途:1.在beanshell自己引入相关jar包
2.看开发,怎么管理,相关依赖怎么做的
六、Maven的pom配置体系详解
pom 项目对象模型 Project Object Model
pom.xml是maven的核心配置文件
一个maven项目有且只有一个pom文件
在idea中model就是一个项目
model是workspace
在pom.xml中可以去造依赖
把别人的写好的jar包拿来用
直接在dependencies把他的坐标加进来,自动把相应的jar包拉去下来
坐标:文本标识,根据坐标的描述可以找到相应的资源
dependencies里的核心元素:
com.zhou.test01
test01
1.0-SNAPSHOT
compile依赖的作用域,默认是compile,参与到打包部署,如果是test就不打包部署只能用在测试代码中,runtime是在编写代码不需要用到,运行时需要用(参与到打包部署)
jar Java项目是 jar(默认)、web项目是 war 父项目是pom
同时执行两个命令的配置
若要引用某个依赖fastjson,可以去maven仓库https://mvnrepository.com/去搜fastjson(阿里巴巴)
这里即就是坐标
properties全局属性
点击1.2.78版本号–右键–Refactor–Extract-Property
即生成了
超级POM
在使用idea时(通过命令创建项目、执行相关命令时、可以看到pom里是没有添加相关插件的
就只有坐标相关、properties,没有plugin
是如何执行相关命令
为什么会有嘞?因为涉及到了超级pom这个文件
,这个文件是继承了默认的父级pom
就像某一个类直接间接继承了Objectl类。
在maven里也有一个超级(父)pom的概念,idea可以看到,myeclipse可以看到
超级pom不可以改。
七、Maven中的关系:继承、聚合、依赖
1、继承
项目也是有继承的,一个maven项目继承另一个maven项目,被继承的项目为父项目,另外一个项目则为另一个项目的子项目。
场景:微服务项目,一个父项目,拆分了很多子项目。
就需要用到继承,把一个项目继承为另一个项目,最直观的方式是按目录结构创建。
实现继承项目:
第一步:在父项目的packing里配置pom,表示着这个所属的maven项目不会被打包。
第二步:在子项目的pom中添加parent,引用父项目的坐标groupid,artifactID
第三步:把子项目用到的依赖都提取到父项目的pom中,外层用dependencyManagement,依赖就不会被传递。
父项目不会用来写代码,只是用来管理相同的配置,公共的依赖提取到父项目的pom。
子项目用的技术栈基本是一样的,公共的依赖可以提取父项目的pom。
加上,可以选择性继承,要用什么,就直接添加依赖。
父项目的pom+ 方式解决:
要升级,版本号若全在父级pom,直接在父级项目的properties里改,子项目会继承父级项目,可以直接添加依赖。
2、聚合
父项目管理子项目。
在父项目的pom中添加modules,管理子项目。
执行父级pom的命令时,会对module模块进行操作。
3、依赖
依赖的传递。
4.具体操作步骤
1.file–new --project–Empty project–next–填写project name(随便定义)
2.file -new model–选择maven----next–填写Groupid(公司域名反向如com…)、Artfactid(名字)–next–finish 此时相当于是父级项目,不需写代码,将src删除
创建子项目时,就自动指定继承 (父项目的packing里配置pom)、子项目自动创建parent、聚合(父项目pom自动创建modules)
3.创建子级项目
鼠标放在父级项目上右键–new --modle–maven—next–填写子项目parent的父级坐标(比如Groupid此时这个不用写、直接写Artfactid)–next–finsh
此时的父级pom,自动将packing里配置pom,自动创建modules)
此时的子项目的pom,自动创建parent,自动引用父项目的坐标groupid,artifactID
若出现这个,可以进行如下配置(1.settings–搜索maven–选择maven home directory–选择maven所在的位置-2.settings–搜索maven–importing -勾选 import maven projects auotmatically)
继续创建两个子项目
子项目都有相同的依赖,父级管理子级的依赖和版本,需要提取到父级pom里
去maven仓库获取依赖,假设每一个子项目有一个共同依赖,就需要将共同依赖的提取到父级项目里
这样的缺点是子项目都可以用到依赖,改进 把相关依赖放到 dependencyManagement中
,根据自己想要的依赖进行选择,此时依赖就不会进行传递,即在右侧看不到dependencies
若子项目需要用依赖,在子项目的pom中添加依赖,(版本可去掉)即可在右侧看到所需要的依赖。
在父级的pom文件中,可将版本号提取出来,操作如下
选中中间版本号–Refactor–Extract–Property
propertties里一般存编码、版本这些属性值的
各子项目所需要版本不一样,在各自的pom文件加上version即可。
product依赖order,user依赖product
product依赖order,user依赖product,order依赖httpclient