Maven

来源:互联网 发布:linux系统时间修改 编辑:程序博客网 时间:2024/06/16 16:04
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这些。 



原创粉丝点击