Maven

xiaoxiao2021-02-28  100

Maven 一、引言  1.一般项目的框架:struts2、spring、mybatis   1)先下载各框架所需要的jar包   2)jar包多,有用、没用的、版本冲突的。   3)框架只是使代码 分层清晰、封装方便   注:但项目还是乱的,无管理  2.项目管理和构建工具:maven、ant、grandel   1)方便管理和构建项目  3.学习参考网站:http://www. imooc.com/learn/443  二、Maven入门  1.maven介绍与环境搭建  maven是基于项目对象模型(POM),可以通过一小段   描述信息 来管理项目的构建、报告和文档的软件项目管理工具。   1)自动化的构建:编译、测试、运行、清理、打包   2)提供的仓库的概念:提供了统一管理项目所用的每三方jar包。  注:避免了因电脑环境配置不同而导致项目在不同电脑无法运行。  如:很多著名的开源项目都是由maven管理的,如struts2,hibernate,淘宝网  2.下载maven压缩包   1)apache-maven-3.3.3.bin.zip  注:需要java1.7的支持   2)bin目录:包含了mvn的运行脚本   3)boot目录:包含了一个类加载器的框架   4)conf:配置文件目录   5)lib:maven所有的类库,包含maven自身的+所依赖第三方的  3.配置环境变量:   注:多人使用的电脑可以在用户变量里设置,若是私人的则在系统变量里设置   1)M2_HOME:指向maven的安装目录,即下载的安装包的解压目录   2)PATH:指向maven的bin目录   3)查看版本信息:mvn -v  注:包括java的版本信息  4.maven案例:hellomaven   1)目录结构:  —src  —main  —java  —package(自定义包)  —test  —java  —package  —resources  —pom.xml  —target   2)代码  a.HelloWorld类  b.HelloWorldTest测试类  c.pom.xml:copy一下pom.xml文件,取其pom.xml的开头格式进行编码,放在根目录中。  注:从maven的源代码中找到 struts-2.2.3—>lib—>struts2-core-2.2.3.jar—>META-INF—>maven—>org.apache.struts—>struts2-core—>pom.xml文件      3)编译运行:cmd窗口执行  a.cd到项目目录  b.编译:mvn compile  注:编译成功:build success  注:第一次编译,会到中央仓库下载第三方的插件 和maven所依赖的jar     c.运行测试类:mvn test  注:之后会生成一个target文件夹(编译后生成的字节码文件(如.class文件)和测试报告等),target文件夹与src同级  d.将项目打包:mvn package  注:生成一个maven的jar  三、Maven核心知识  1.常用的构建命令  a.mvn -v :查看maven版本  b.mvn compile:编译  c.mvn test:测试  d.mvn package:打包  e.mvn clean:删除target  f.mvn install:安装jar包到本地仓库中  注:一个项目需要 使用另一个项目中的类时,需要在另一个项目中mvn install,并在本项目pom.xml中添加依赖关系。  2.自动创建目录骨架   1)archetype插件:用于创建符合maven规定的目录骨架  注:即不用手动创建项目目录     注:创建相应的目录存放资源和代码:资源如css、imaget   2)运行插件:  首先创建项目名,在项目目录下进行:  方式一:根据提示,一步步输入  a.mvn archetype:generate  b.选择版本:选最新的  c.输入groupId、artifactId、version、package  注:即pom.xml需要设置的该项目的参数  注:groupId是组织名,公司网址的反写+项目名。artifactId是项目名-模块名。version是版本号。package是代码所存在的包名  d.输入y  注:即yes or no? 是询问上面的输入是否确定  方式二:直接一次性输入所有信息,能过-D输入每个参数  a.mvn archetype:generate -DgroupId=… -DartifactId=… -Dversion=… -Dpackage  b.选择版本:选最新的  c.输入y  3.maven中的坐标和仓库   1)坐标:构件通过坐标作为其  唯一标识,如:groupId、artifactId、version  注:构件:任何一个依赖、插件、项目构建的输出   2)仓库:分为本地仓库、远程仓库  注:本地仓库找不到,会到中央远程仓库去查找下载。再找不到就会报错。  maven默认提供一个全球中央仓库central repository的地址:https://repo. maven.apache.org/maven2  注:apache-maven-3.3.3 —>lib—>maven-model-builder-3.3.3.jar —>解压—>找到org/apache/maven/model —>pom-4.0.0.xml   3)镜像仓库:  a和b仓库提供了一样的功能,maven仓库都是国外的,导致国内无法访问外网,但国内有镜像仓库。  修改镜像仓库位置:mirrors(id(该镜像仓库的id),mirrorOf(为哪个仓库配置镜像,可以使用通配符*,),name,url)  注:apache-maven-3.3.3—>conf—>settings.xml  注:pulibc应改为public  只要配了镜像仓库,所有对仓库的访问都会转到镜像仓库,原仓库就无效用了。删掉镜像仓库的配置,就会默认原仓库了。   4)仓库的位置:.m2—>repository  注:其中com是本地仓库的发库位置   5)更改本地仓库的默认位置:  默认:<localRepository>/path/to/local/repo</localRepository>  修改为自定义路径:D:/work/repo  将settings.xml复制一份 到repo目录下。  进入maven示例项目目录,输入mvn clean compile重新编译,将jar安装到现在的repo下  4.在eclipse中安装maven插件以及创建maven项目  注:4.0以上不用安装   1)将下载的maven插件目录复制到 eclipse/dropins目录中,重启eclipse即可   2)进入eclipse—>window—>preference —>maven   注:maven需要jdk的支持,而eclipse只有jre,需要添加jdk   3)添加jdk:  进入eclipse根目录,打开eclipse.ini。  在—launcher.xxmaxpermSize下的512m后一行添加jdk的bin目录路径:  -vm  c:/java/jdk1.7.0/bin/javaw.exe   4)修改eclipse的jre:preferences—>java—>installed Jres—>add—>选择jdk的jre  添加jdk参数:edit-->default vm arguments—>输入-Dmaven.multiModuleProjectDirectory=$M2_HOME —>finished   5)更改maven的默认配置:  a.preferences—>maven—>installations—>add:更改成本地的maven,即添加apache-maven-3.3.3  b.preferences—>maven—>User settings—>browser:选设定的本地的settings.xml,即repo的settings.xml   6)测试:  a.新建项目:new—>maven—>maven project—>next—>选择目录模板maven-archetype-quickstart —>设置项目名,groupId,artifactId,version,packaging  b.编译compile:pom.xml右击—>run as—>maven build…—>goals—>输入compile—>run  c.打包package:pom.xml右击—>run as—>maven build…—>goals—>输入package—>run  5.maven的生命周期和插件   1)完整的项目的构建过程:  清理clean、编译compile、测试test、打包package、集成测试、验证、部署install   2)maven生命周期:  a.clean清理项目、default构建项目(最核心)、site生成项目站点  b.每个生命周期是相互独立的,各生命周期都有自己的阶段  clean的阶段:pre-clean执行清理前的工作,clean清理上一次构建生成的所有文件,post-clean执地清理后的文件  default的阶段:compile、test、package、install  site的阶段:pre-site在生成项目站点前要完成的工作,site生成项目的站点文档,post-site在生成项目站点后要完成的工作,site-deploy发布生成的站点到服务器上。  注:根据pom.xml的信息自动生成站点  c.生命周期是顺序执行,后一个生命周期依赖前一个  如:运行package时,compile和test会自动顺序执行   3)插件安装:  a.eclipse本身只支持java,要支持其他的都需要安装相应插件  b.maven插件:下载地址maven.apache.org  plugin—>maven plugins核心插件  c.如source插件:可以打包项目源码  在pom.xml添加build—>plugin—>将source打包操作 嵌入到package命令,即当执行package时会执行compile、test、source  6.pom.xml解析   1)pom.xml常用元素:  a.pom是maven的核心管理文件,用于项目描述、组织管理、依赖管理、构建信息的管理  b.project标签:pom的约束信息  c.modelVersion标签:是必须元素,指定了当前pom的版本  d.坐标标签:groupId(反写的公司网址+项目名),artifactId(项目名+模块名),version(版本号,由3个数字表示,每1个表大版本号,每2个表分支版本号,每3个表小版本号,snapshot快照,alpha内部测试,beta公测,release稳定,GA正式发布),packaging(maven项目的打包方式或格式,默认为jar,其他有war,zip,pom)  e.name标签:项目描述名  f.url标签:项目地址  g.description标答:项目描述信息  h.developers标签:开发人的描述信息  i.licenses标签:许可证描述信息  j.organization标签:组织信息  k.dependencies标签:依赖列表,可含多个依赖项  注:每个依赖项的坐标标签和其他标签:groupId,artifactId,version,type,scope(依赖范围,如test表只在测试类中有用,即也只能在测试类中引用该依赖jar),optional(设置依赖是否可选),exclusions(排除依赖传递列表,用于去掉该jar中不想依赖的jar)  l.dependencyManagement标签:依赖的管理,包含多个依赖,用于父子模块,如将公共的依赖抽象出来放在父模块中定义,子模块只需通过这个标签依赖父模块就行了,不用再重新定义  m.build标签:为构建行为提供相应的知识  子标签:plugins(插件列表)  plugins项的标签:groupId,artifactId,version  n.parent标签:对父模块的一个继承  o.modules标签:一般项目只能一个模块一个模块的编译,有modules可同时定义多个模块进行编译。  7.依赖范围:scope   1)maven提供3种classpath:编译、测试、运行  注:一般开发时要使用某个框架,就要将某框架的jar引入到该项目的classpath路径中,这样项目才能使用某框架提供的 方法  注:依赖范围scope就是 控制依赖和3种classpath关系的   2)scope属性:  a.compile:默认的范围,编译测试运行都有效  b.provided:在编译、测试时有效  如:web项目中加入Servlet API,在运行时不会被加入,因为web容器中已经包含了Servlet API  c.runtime:在测试、运行时有效  如:jdbc驱动,加入后不会编译不需要,只有测试、运行时才需要使用具体的jdbc驱动。  d.test:只在测试时有效  如:junit  e.system:只在编译和测试时有效,与本机系统相关联,可移植性差  如:引入本机的java_home  f.import:导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置,即从其它pom中继承过来的依赖     8.依赖传递:间接关系,间接依赖   1)例3个maven项目:A、B、C  a.B依赖 A,C依赖 B  b.将A项目打包,并package打包,install安装放在本地仓库中  c.在B中pom里添加B对依赖 A关系,再将B项目打包,并package打包,install安装放在本地仓库中  d.在C中pom里添加C对依赖 B关系,编译  在C项目的依赖jar包中,不仅加载B的依赖jar,也会加载A的依赖jar,即传递依赖。  注:若C只想依赖B,可用exclusions将A的依赖排除掉。    2)jre修改:  a.暂时性局部性的修改,即再次新建项目还是默认的:若项目使用的是默认的jre,而不是自己安装的,可以手动修改,选中项目中的jre右击,properties—>选择自己安装的jre  b.永久性全局性的修改:settings.xml—>找到profile(182行左右)—>加入自己安装的jdk配置即可  9.依赖冲突:版本冲突   1)短路优先:先优先依赖关系线短的  如:a依赖b、b依赖c的3.0版本的jar;和 a依赖c的2.0版本的jar。会优先选后者2.0版本的依赖关系   2)先声明先优先:如果路径长度相同,则谁先声明,先解析谁  如:a依赖b、b依赖x的3.0版本的jar;和 a依赖c、c依赖x的2.0版本的jar。会按顺序,谁在pom中配置位置在前,就优先谁  10.聚合和继承   1)聚合:同时执行多个项目install,一般每个项目都要单独install安装到本地仓库中  如:新建项目  a.修改pom的packaging:将jar改为 pom  b.在pom中添加:modules,添加A、B、C三个项目  c.pom右击运行:clean install  注:会依次将A、B、C三个项目的jar安装到本地仓库   2)继承:提供共同的依赖 作为父类,子项目继承  如:新建项目parent  a.在父类项目中:配置共同的依赖,并将共同的依赖 添加放到dependencyManagement标签里  注:版本号也可提取出来,放在properties标签里,用$引用即可  b.在子类项目中:添加parent标签,加入父类项目的坐标。这样即可去掉共同依赖的版本号version和scope  四、Maven建立web项目  1.使用maven构建web项目   1)新建web项目:  new —>maven—>选择模板maven-archetype-webapp—>next—>groupId、artifactId—>finished   2)添加servlet api的依赖:在maven官网找到servlet的坐标信息,添加到pom.xml里,添另scope为provided   3)添加目录:web项目会自动创建resources资源目录,需手动添加代码java目录和test目录  选择项目右击—>new source folder—>选择添加项目的项目名 —> 输入添加的项目目录  或是 在显示项目栏中选择navigator—>在项目相应目录上添加目录 —>再回到project explorer的显示方式 —>项目右击maven—>update project   4)classes的输出路径:  项目右击—>build path —>configure build path —>source —> 所有的output folder—>确保是指向target/classes   5)将项目转成web项目:  项目右击—>属性properties—>project facets—>勾选dynamic web module—>ok   6)修改部署时的默认配置:  项目右击—>属性properties—>deployment assembly—>删除测试test相关的目录(测试代码是不需要部署的)—>ok   7)package设置:war  用package命令将项目打包成war包,再拷贝到 能 支持的web容器中,这样web项目就能在浏览器在访问了   8)Jetty:web容器之一,再如tomcat容器  在maven官网中找到Jetty插件,找最新版,找到jetty 的坐标信息,复制到pom的build的plugin中   9)启动jetty容器:  项目右击—>run as —> maven build... —> goals中输入命令:jettyrun—>ok  或是在package打包项目的时候就启动jetty服务:就不用手动启动  直接输入命令:clean package即可  同理如 tomcat服务器:   10)在浏览器上即可访问web项目:localhost:8080/项目名/  五、Maven总结  1.maven下载和环境搭建:   1)如何在windows下安装maven  2.maven目录骨架说明   1)src项目目录:main/java、test测试代码   2)pom.xml:用于管理项目依赖和构建过程  3.常用的maven命令   1)clean、compile、package  4.仓库和坐标  5.在eclipse中安装maven插件和创建maven项目  6.生命周期,pom.xml,依赖,聚合,继承  7.eclipse中创建web项目和jetty插件的安装  总结:maven就是一个调度角色,它会把一个pom文件转换成一系列操作步骤,最后交给一个个小的插件去完成,这些插件背后可能就是一些小工具,比如javac,jar这些。 
转载请注明原文地址: https://www.6miu.com/read-66706.html

最新回复(0)