Maven是什么
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
以上是官方的理解,下面简单说说我的理解:从我使用的角度而言,maven就是方便jar包导入的工具,有了它就不用自己到处找jar包导入了
它是一种
- 构建工具
- 依赖管理工具
- 项目信息聚合工具
Maven的下载与安装
- 官网下载安装(地址),选择bin.zip的版本
- 解压到安装目录
- path中加入maven安装目录下的bin目录路径
- 测试安装成功:cmd中执行mvn -v
- 修改配置文件,apache-maven-xxx\conf目录下的settings文件(由于setting中的资源获取链接全球只有一个,在国外,而中国对外网限制,所以下载速度会特别慢,所以这里我改成阿里云的镜像)http://maven.aliyun.com/nexus/content/groups/public/
这里自定义你的资源仓库,也就是你所以获取的jar包的存放地址,没有自行添加
- Eclipse配置
Maven的基本概念
Maven(翻译为"专家",“内行”)是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
1.项目构建
项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。
2.生命周期
- mvn compile
- 执行phase:validate–>generate sources –>process resource –> compile
- default clean site 3大独立的lifecycle
- mvn clean compile
3.依赖管理
依赖指的是jar包之间的相互依赖,比如我们搭建一个Struts2的开发框架时,光光有struts2-core-2.3.16.3.jar这个jar包是不行的,struts2-core-2.3.16.3.jar还依赖其它的jar包,依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。
坐标
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<type>jar</type>
<classifier>jdk15</classifier>
</dependency>
坐标-依赖范围
- compile:编译时依赖在所有阶段都可获得,这是默认值。
- provided: 提供的依赖范围用来编译应用程序,但无需部署。若你用到jdk或者应用服务器提供的 JAR,则使用此范围,servlet APIs就属于这个依赖范围。测试时,此依赖范围也加入到classpath。
- runtime:运行依赖范围在编译阶段是不需要的,只有在运行时需要,比如JDBC驱动程序。
- test:测试范围依赖,仅在编译和运行单元测试时需要(比如Junit)。
- system 本地依赖,不建议使用。(nexus)
依赖传递
- Only compile and runtime scopes are transitive
- A->B->C
简单传递依赖:A->C
- A->B-C(0.1)
- A->C(0.2)
最短路径优先原则: A->C(0.2)
- A->B->C(0.1)
- A->E->C(0.2)
第一声明优先原则:最终依赖C(0.1)
依赖归类
<properties>
<spring.version>2.5</spring.version>//指定版本号
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>//依赖指定版本号
</dependency>
</dependencies>
依赖排除
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
<exclusions>//此下内容依赖排除
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
4.继承
- 父maven项目中通过dependenciesManagement中定义公共依赖项
- 子maven项目中通过dependencies中定义公共依赖项
- 插件/properties都可以继承
使用Maven的好处
Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码就必须放到哪个 目录下,这些目录都有明确的约定。
Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情
使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。
Maven的常用命令
- alias mvni=‘mvn -T 1C clean install -Dmaven.test.skip=true’
- alias mvnp=‘mvn -T 1C clean package -Dmaven.test.skip=true’
- alias mvnv=‘mvn versions:set -DgenerateBackupPoms=false’
- alias mvnd=‘mvn -T 1C clean deploy -Dmaven.test.skip=true’
- alias mvndd=‘mvn -T 1C clean deploy -P dev -Dmaven.test.skip=true’
- alias mvndo=‘mvn -T 1C clean deploy -P online -Dmaven.test.skip=true’
- alias mvnc=‘mvn -T 1C clean eclipse:clean idea:clean’
其他主题
- IDE:IDEA/STS
- Gradle?
- Archetype
- mvn -e
- mvn exec:java -Dexec.mainClass=“com.foo.Main"
- mvn dependency:tree
- Site
- Report
- SCM