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这些。
阅读全文
0 0
- Maven
- Maven
- Maven
- maven
- Maven
- Maven
- maven
- maven
- maven
- maven
- Maven
- maven .
- Maven
- maven
- maven
- maven
- MAVEN
- Maven
- 用户画像-如何设计
- linux文件系统之mount流程分析
- Android之设置横屏竖屏
- HDU 6184 求三元环
- Android Studio检查不到真机
- Maven
- iOS开发稀碎小技巧二
- 小白成长记——Android基础之Activity临时数据缓存
- C语言数组
- 一段代码:运行就堆栈溢出,呵呵。
- Lcm(最小公倍数)
- 面试基础问答
- Oracle JOB间隔时间详解
- js判断一个时间是不是在某个时间段内