https://repo.maven.apache.org/maven2
-镜像仓库:/conf/setting文件:
maven.net.cn
central
central mirror in china
http://maven.net.cn/content/groups/public
修改本地仓库位置:D:/Maven/repository
配置镜像仓库,先前的所有配置会转到镜像仓库中。
默认仓库位置.m2 repository,将settings.xml复制到更改后的本地仓库中,这样maven版本更新不用修改settings.xml
在eclipse4.0及MyEclipse中就不需要安装maven插件,在window–preference中可以查看是否有maven插件,没有就装Maven插件,复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini,在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。
eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修改eclipse的JRE,java—Installed JREs–ADD–Next–把本地JDK的目录放到JRE home中,并设置Dmaven.multiModuleProjectDirectory=$M2_HOME–最后勾选JDK
③更改maven本地的配置Installactions—ADD—把本地的maven目录放进去
④修改setting的路径
会出现的问题:
1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk
2、run as–>Maven build…–>在goals中compile(可以在此处使用其他的命令,如:package)—》run
若报-Dmaven.multiModuleProjectDirectory错误,则在选项–>java–》installed JRES 中设置jdk的参数,
添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”
完整的项目构建过程:清理,编译,打包,测试,集成测试,验证,部署,clean complie test package install
生命周期:clean 清理项目pre-clean 执行清理前的工作,clean执行上一次构建生成的所有文件,post-clean执行 清理后的文件; default 构建项目complie test package install ;site生成项目站点 pre-site生成项目站点前要完成的工作,site 生成项目站点的文档 post-site 生成项目站点后要完成的工作,site-deploy 发布项目站点到服务器上;
注意,Maven的生命周期对应的命令是顺序执行,没有人为的顺序的一个个执行,那Maven会默认的自动运行。
pom.xml常用元素:
根
指定了当前pom的版本
反写的公司网址+项目名
项目名+模块名
第一个0表示大版本号、第二个0表示分支版本号、第三个0表示小版本号
snapshot快照版本;
alpha内测版本;
beta公测版本;
release稳定版本;
GA 正式发布版本
打包方式,默认是jar项目描述名项目地址项目描述开发人员列表许可证信息组织信息 设置依赖是否可选,true/false 排除依赖传递列表 dependencyManagement为依赖的管理,一般用于父模块中,运行时不会被编译加载依赖。用于子模块继承父模块中依赖,比如junit测试依赖。build中为插件列表,会放相应的插件,parent用于对父模块中pom的继承,modules用于当项目启动时,需要多个模块是,对其他项目进行编译,不需要一个个进行编译。dependencies表示依赖列表,dependency表示依赖项,scope表示依赖范围,optional表示设置依赖是否可选,默认为false,默认继承,为true则项目必须加载依赖项。exclusions表示排除依赖传递列表,比如如果项目引用spring,spring中被引用其他jar也会被引用,此为依赖传递。
在开发者如果要使用某一个框架,就要把这个框架引入到项目的classpath中
maven提供了三种classpath分别是编译,测试,运行
依赖范围
scope依赖范围
1.compile:默认范围,编译测试运行都有效
2.provided:在编译和测试时有效
3.runtime:在测试和运行时有效
4.test:只在测试时有效
5.system:在编译和测试时有效,与本机系统关联,可移植性差
6.import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
install指令能把项目打包到本地仓库,运行install指令,同时还运行了package打包。
编译一个项目,如果存在依赖,首先会在本地仓库查找,如果没找到,直接到中央仓库查找,如果还是没找到,则报错。所以编译一个存在本地依赖的项目,本地依赖一定要运行install指令,把依赖的项目打包到本地仓库。
如果想排除某个依赖的项目,则需要在pom.xml
添加exclusions标签,添加到已经添加了排除依赖的依赖里,把需要排除的依赖的坐标引进来。
依赖的传递性
需要将父类pom install到本地仓库中, 子类pom在中加入
父类依赖坐标 即可调用
在中运用 来排除所不需要的父类pom
创建三个maven项目bge,nange,shanji。nange依赖bge项目启动,shanji依赖nange启动,启动下层项目时,上层需要打成jar。如图如果不写其中的exclusion中的内容时,shanji也会依赖bge的jar。此为传递依赖。
maven中jdk版本设置 settings.xml
依赖冲突
不同版本的构件
1.短路优先
2.先声明先优先
如果路径长度相同,则谁先声明,先解析谁
A传递依赖于D的不同版本,A会依赖于哪个版本的D;
解决冲突的两大原则:短路径优先(路径长度不同),先申明者优先(路径长度相同)
1)A->B->C->D 2)A->E->D 此时A依赖于2)情况下的D的版本
1)A->B->D 2)A->E->D 此种情况下,若在A的pom文件中,B的依赖声明先于E的依赖声明,则A依赖于1)情况下的D的版本
聚合:若想将多个maven项目install到本地仓库,为了不一个一个的操作,maven提供了一种方式可以一起将这些项目install到本地仓库,此法成为聚合
作如下更改:pom
加入代码:
…/hongxing-bge
…/hongxing-nage
…/hongxing-shanji
保存,run as clean install即可
继承:解决多个项目含有相同特性的问题:
新建maven项目:作如下更改:
pom
<junit.version>3.8.1</junit.version>
</>
</>
${junit.version}
test
以上是对父级的pom。xml文件的更改,下面是对子项目pom。xml文件的修改:
加入: ;</>
</>
使用maven构建web项目
1:打开Eclipse
2:创建Maven项目,选择archetype-webapp模板
3:解决Servlet没有生命依赖的问题,在pom.xml中添加servlet的依赖,可以去中央仓库选择servlet版本
例如:
javax.servlet
javax.servlet-api
4.0.0-b01
4:手工完善Maven约定好的目录结构
可以在navigator窗口中手动新建
…/src/main/java
…/src/test/java
5:Project Explorer中更新项目
6:创建项目的输出目录
build path中设置输出路径output folder,确保每个module都输出在…/tartet/classes目录中
7:将Maven项目转换为Web项目
右击-属性-project facets-勾选动态模板(Dynamic Web Module)
8:修改部署时配置去掉多余的配置项例如:测试代码
右击-属性-Deployment Assembly-删除多余的配置项(测试代码)
9:使用package命令打包项目—使用jetty这个插件(在Maven的中央插件库中寻找)作为Web容器,在中央仓库查找jetty的plugin坐标配置到pom.xml中
pom.xml例子:
webbproject-demo
org.mortbay.jetty
jetty-maven-plugin
2.1.1
package
run