一、Maven简介
maven仓库: https://mvnrepository.com/
1、什么是Maven
https://maven.apache.org/
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
|