介绍
maven 是Apache旗下一个开源项目,用Java写成,主要用于Java项目的管理,主要的用途:
- jar包管理:将jar包统一到仓库,减少项目工程的文件大小。
- 项目的一键构建(tomcat:run)、提供项目的 compile、test、package、运行、install、employ
- 将一个大项目拆分成一个个子项目,方便管理。
生命周期
- clean生命周期:包含pre-clean、clean、post-clean
- build(default):validata complie test package verify install deploy
- site
不同的生命周期包含一系列阶段,执行每个阶段都会将这个周期内之前的阶段都执行一遍。每个阶段是使用插件目标来完成任务的,maven会根据不同的打包类型(war/jar)将不同的插件目标绑定到不同的阶段,有些插件目标没有绑定到阶段,那么可以单独调用,比如tomcat:run 目标,可以通过tomcat插件使用。
也可以手动将插件目标绑定到某个阶段。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
比如上面的pom就将一个antrun:run 目标绑定到了pre-clean阶段。
仓库

依赖scope
| 编译 | 测试 | 运行 | 例子 | |
|---|---|---|---|---|
| compile | Y | Y | Y | spring-core |
| provide | Y | Y | jsp、servlet | |
| runtime | Y | Y | jdbc驱动() | |
| test | Y | junit |
依赖传递

依赖冲突
-
第一声明优先原则。在pom文件定义依赖,先声明的依赖为准。
-
路径近者优先原则。所以可以自己添加jar包的方式解决冲突。
例如:A 依赖spring-beans-4.2.4, A 依赖B依赖spring-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中, 因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。
-
排除依赖
-
锁定版本。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement>注意版本锁定,但是并没有添加依赖,后面还需要添加依赖,但是可以不指定版本。
打包方式
- jar
- pom(父工程,子工程需要设置父工程)
- war(web工程)
maven安装
maven 可以编译项目,所以需要指定JAVA_HOEM。