maven笔记
一,pop.xml编写
??? 1,在pop.xml中以下四个是基本的元素
??????????? modelVsersion?????????? 这个在maven2及3来说一般只能是4.0.0
??????????? groupId???????????????????? 一般为工程名
??????????? artifactId?????????????????? 工程模块名
??????????? version???????????????????? 项目版本
?
二,代码目录强制规定
??????????? 主代码???????????? : src/main/java/????????? 包名一般与groupId和artifactId相吻合
??????????? 主代码资源文件 : src/main/resources/? 放如果properties文件等
??????????? 默认web资源?? : src/main/webapp/???? 放jsp,html,css
??????????? 测试代码??????? ? ? ? ?? :src/test/java/??? 包名一般与groupId和artifactId相吻合
??????????? 测试代码码资源文件? :src/test/resources
三,maven的主要命令
?????? 1,常用
? ? ? ? ??? mvn? clear
??????????? mvn? test
??????????? mvn? clear test
??????????? mvn? compile
??????????? mvn? clear compile
??????????? mvn? package
??????????? mvn? package install?????? 当install比package多一个打包安装到本地仓库中
???????????
?????????? 2, 生成项目骨架
????????????? maven 3
???????????????? mvn archetype : generate
????????????? maven 2
???????????????? mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
???????????????? 实际上运行的是 groupId:artifactId:version:generate
??????????? ... ...
??????????? ... ...
四,依赖关系
???? 1,dependencies结点下dependencie中包含的元素
????????? groupId,artifactId,version:这三个不再多说
????????? type?? ? ??? :? 依赖的类型,对应项目坐标定义的packaging。大部分情况下,该元素不必声明 ,其默认值 为jar
????????? scope ? ? ? :? 依赖的范围
????????? optional??? :? 标记依赖是否可选
????????? exclusions : 用来排队传递性依赖
???? 2,依赖范围(用来控制依赖和三种classpath[编译,测试,运行])
????????? Compile?? : 编译依赖范围,如果没有指定,则默认为此范围,且对于编译,测试,运行三种classpath都有效
????????? Test??????? : 这种依赖仅对于测试classpath有效。eg: JUnit
????????? Provided? : 己提供依赖范围,使用此依赖范围的Maven依赖,仅对于编译和测试classpath有效。eg:serlet-api
????????? Runtime?? : 运行时依赖。这种依赖对于测试和运行有效。eg: JDBC驱动
????????? System??? : 系统依赖。这种与Provided范围完全相同,但使用System范围的依赖时必须通过systemPath元素显示地指定 依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且住住与本机系统绑定,可能造成不可移植,因 此应该谨慎使用。systemPath元素可以引用环境变量 需另加:<systemPath>${java.home}/lib/rt.jar</systemPath>
?
?
?
依赖范围 编译?? 测试?? 运行??? 例子compile? YYY
spring-coretest?????? -
Y -JUnitprovidedYY-
servlet-apiruntime -
YY JDBC驱动system YY-
本地,maven之外的文件
?
?
?
3,传递性依赖?? 【坚列为第一依赖关系,横项为第二依赖关系,交叉为传递关系】
?
compile??????? test????? provided??????? runtimecompile ? compile???????? --runtimetest????? ? test????????????? -- test??????????? provided provided???? ? - provided???? ? provided????? runtime?? runtime??????? -- runtime????????
?
?? 4,依赖调解 (不同依赖可能引用相同jar包的不同版本,所以maven要排除情况【下面优先级从高到低】)
???????? 4.1,路径优先原则(最短原则)
???????? 4.2,? 第一声明优先(pop.xml中依赖声明顺序,此只适用2.9级以后版本,以下的版本不确定)
?
? 5,可选依赖
??????? 定意????? :项目A依赖于项目B,B依赖于项目C、D但对于C、D的依赖都是可选依赖,那么C、D对A没有任何影响。
??????? 出现原因 :可能项目B实现了两种特性,一种依赖于C一种依赖于D,但是C与D的特性是互斥的,所以要配制可选。
??????? pop配制 :<optional>true</optional>
?
? 6,排除依赖
??????? 原因?????? : 可能项目有一个第三方依赖,而第三方依赖由于某些原因依赖了另外一个库的不稳定版本,这个不稳定版本可能 对项目产生不可预料的结果,所以要排除这个依赖。
??????? pop 配制 :? <exclusions> <exclusion><groupId>xxx</groupId><artifactId>xxxx</artifactId></exlusion></exlusions>
? 7,归类依赖
?????? 有些包的依赖它们来自同一项目的不同模块,因此它们的版本是一样的。所以可以考虑用
?????? <properties> <struts.version>2.6</struts.version></properties> ? ${struts.version} 等来统一版本号
?8,优化依赖
????? 查看当前项目己解析的依赖:mvn dependency:list
????? 查看项目的依赖树??????????? :mvn dependency:tree
????? 分析当前项目依赖???????? ?? :mvn dependency:analyze