这两天被一个web项目的bug弄得头疼,今天快下班才明白是maven的原因,于是又重新去看maven的视频和文章,就决定记录一下,免得又忘记了。这篇文章里,仅仅是maven各种常见的操作,及eclipse中maven插件的使用,至于它的便利性及实用性意义,还需要以后在项目中慢慢体会。
1、maven的常用配置及命令:
- modelVersion:POM版本模型,固定为4.0.0
- groupId:一般指某个公司或者某个组织的某个项目,比如org.springframe
- artifactId:一般指某个具体项目的某个模块,比如spring-context(名称)
- version:项目版本
- mvn compile:编译源代码。生成class文件位于生成的target目录下,在eclipse中都是自动编译了,就使用得少了。
- mvn clean:清空。target目录被清理了
- mvn test:测试。根据maven的目录结构放置,需要加入junit包
- mvn package:打包。将项目生成jar/war包,位于target目录下,项目名有artifactId和version组成
- mvn install:将项目安装到本地仓库中。当项目较大分为多个模块时,安装到本地仓库后方便其他项目直接使用
其中,groupId、artifactId、version构成了项目模块的坐标,可以直接被其他项目进行依赖。
2、maven的依赖特性:
依赖的传递性:A-->B-->C,则项目A中添加所依赖的Bjar包后,会自动下载Cjar包。
依赖选择,最短路径原则:当有A-->B-->C-->X(P1)和A-->D-->X(P2),参考最短路径原则,只会下载第二个,不然会有冲突。
如果路径一样,最先申明原则:当有A-->B-->X(P3)和A-->D-->X(P4),参考最先申明原则,只会下载第一个。
3、maven聚合与继承:
4、maven依赖范围
Scope 选项如下:compile: 编译依赖范围。默认就是 compile 。在编译,测试,运行都有效;
test :测试依赖范围。仅测试有效; 例如 JUnit ;
provided :已提供依赖范围。编译,测试有效,运行时候无效。例如 servlet-api,发布到tomcat目录下运行时就需要配 置provided,不然会与tomcat自身带的jar包冲突 。
system :系统依赖范围。(了解即可)使用 system 范围的依赖必须通过 systemPath 指定依赖文件的
import :导入依赖范围。(了解即可)使用 dependencyManagement 时候,可以导入依赖配置。