一、概述
Maven(翻译为"专家","内行")是Apache下的跨平台的项目管理工具,是一款软件项目管理和理解工具。
它由纯Java语言开发,基于项目对象模型(POM)的概念,通过添加一小段描述来管理项目的构建。可以帮助我们更方便的管理和构建Java项目。
1)为什么要使用Maven?
以前在用Java开发一个项目时,往往需要引入几十或者上百个Jar包,那么这些Jar可能分散在不同的地址,我们需要一个一个去下载,然后在导入到我们项目中!有时一个Jar包找到合适的版本可能需要几个小时。更让人痛苦的是一个大项目开发需要多人协同开发。那么项目依赖的Jar包就需要有一份公共的来解决不同人引入相同的Jar不同版本的依赖从而导致冲突。
现在使用Maven来构建,Maven通过一个POM文件来管理项目依赖,只要在POM中加入想要的Jar包依赖,Maven会在本地仓库中查找依赖包。如果本地没有找到就会从配置的私服中下载依赖,没有配置私服Maven就会从Maven的中央仓库(99%的开源项目都可以在Maven中央仓库中找到)中去找到指定版本的Jar包。
2)Maven的优点
● jar包管理 ● maven是跨平台的可以在window、linux上使用 ● 清晰的项目结构 ● 多工程开发,将模块拆分成若干工程,利于团队协作开发 ● 一键构建项目:使用命令可以对项目进行一键构建,操作系统中无需安装eclipse和tomcat
① jar包管理
从Maven中央仓库获取标准的规范的jar包以及相关依赖的jar包,避免自己下载到错误的jar包;
本地仓库统一管理jar包,使jar包与项目分离,减轻项目体积。
Maven项目获取jar包的方式:
- 1、Maven项目通过坐标的方式从本地仓库获取jar包;
- 坐标:由公司/组织名(groupId) + 项目名/子项目名(artifactId) + 版本号(version)组成;
- 本地仓库:存放很多jar包,供Maven项目使用;
- Maven通过建立本地仓库索引,可以快速的找到符合要求的jar包,从而解决效率问题;
- 多个Maven项目都可以从本地仓库获取jar包;
- 设置本地仓库:maven根目录 -> conf -> settings.xml,将localRepository标签中的路径替换成自己本地仓库的路径;
设置本地仓库:
- 2、Maven三种仓库概念:本地仓库、远程仓库、中央仓库
- 3、设置阿里云Maven仓库镜像:
在settings.xml文件中的mirrors下添加mirror标签;
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
② maven由纯Java语言开发,是跨平台的可以在window、linux、mac上使用
③ 清晰的项目结构
项目打包时maven自动帮我们创建的目录,里面就是打包好的项目文件
MavenProjectRoot(项目根目录)
|----src:源代码和测试代码的根目录
| |----main:应用代码目录
| | |----java:源代码目录
| | |----resources:配置文件目录,存放项目资源文件,如spring, hibernate配置文件
| |----test
| | |----java:测试代码目录
| | |----resources:存放测试使用的配置文件,如spring, hibernate配置文件
|----target:项目打包时maven自动帮我们创建的目录,里面就是打包好的项目文件
|----pom.xml:这就是配置项目依赖的地方。一次配置,不管以后代码给谁,都可以运行起来
④ 使用Maven将大型项目按照模块拆分成若干工程,不同的团队维护各自的工程,可大大的提升开发效率
- 1、大型商城项目按业务分成商品管理、用户管理、订单管理等等模块。
- 2、中小型项目按照传统项目分为Web、Service、Dao层,依照员工自身的业务能力分配工作。
⑤ 一键构建项目:使用命令可以对项目进行一键构建,操作系统中无需安装eclipse和tomcat。
- 1、创建项目根文件夹,并在该目录中创建pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--所有的Maven项目都必须配置这四个配置项--> <modelVersion>4.0.0</modelVersion> <!--groupId指的是项目名的项目组,默认就是包名--> <groupId>cn.alin</groupId> <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"--> <artifactId>hello-maven</artifactId> <!--version指的是版本,这里使用的是Maven的快照版本--> <version>SNAPSHOT-0.0.1</version> </project>
- 2、编写 Java 类文件,Maven 项目规定,所有的 *.java 文件必须放在 src 目录下的 main 目录下的 java 目录中。
在 HelloMaven 项目根目录中创建一个 src 目录,然后在 src 目录中创建 main 目录,在 main 目录中再创建 java 文件夹
public class Test{ public static void main(String [] args){ System.out.println("hahahahahahahahhahaha!!!"); } }
- 3、使用Maven编译Test.java,首先进入到项目根目录,然后使用命令”mvn compile”进行编译
使用Maven编译完成之后,在项目根目录下会生成一个target文件夹,target文件夹中的classes文件夹存放的就是编译成功后生成的.class文件
- 4、使用"mvn clean"命令清除编译结果,也就是把编译生成的target文件夹删掉
3)Maven的作用
● Maven 统一集中管理好所有的依赖包,不需要程序员再去寻找。
● 对应第三方组件用到的共同 jar,Maven 自动解决重复和冲突问题。
● Maven 作为一个开放的架构,提供了公共接口,方便同第三方插件集成。程序员可以将自己需要的插件,动态地集成到 Maven,从而扩展新的管理功能。
● Maven 可以统一每个项目的构建过程,实现不同项目的兼容性管理
4)Maven的好处
① 一步构建:一个命令即可启动。 ② 依赖管理:对jar包统一管理,避免冲突等问题 ③ 跨平台:可在windows及linux下运行 ④ 有利于提高大型项目的团队开发效率 ⑤ 越来越多的公司使用maven
二、Maven常用命令及生命周期
① clean:清理,编译后的目录;
② compile:编译,只编译main目录,不编译test中的代码;
③ test-compile:编译test目录中的代码;
④ test:运行test里边的代码;
⑤ package:打包 - | java项目->打成jar包 | - | web项目->打成war包 |
⑥ install:发布项目到本地仓库,用在打jar包上,打成jar包可以被其他项目使用;
⑦ tomcat:run:一键构建项目;
● Maven命令的生命周期:
① Clean 生命周期:clean;
② Default 生命周期:compile、test-compile、test、package、install
③ Site 生命周期:site命令,生成项目描述文档静态页;
④ 不同的生命周期可以一起执行,例如 clean compile 先clean 再 compile;
● Maven命令的执行顺序:
① 在相同生命周期中的命令才会受执行顺序的影响; ② Default生命周期中的命令执行顺序: compile <- test-compile <- test <- package <- install
三、Maven项目与传统项目的区别
1)依赖管理
一个java项目需要外部的第三方jar包来进行支持。我们说这个java项目依赖了这些jar包。
依赖管理就是将项目所依赖的jar包按照一定规则进行规范化管理。
● 传统项目的依赖管理
传统的依赖管理就是程序员需要什么jar包,去网上进行下载,然后手动添加到工程中。
缺点:
jar包从网上不好找
jar包没有进行统一管理,容易造成jar包重复及版本冲突
jar包全部添加到工程中,造成工程过大
● maven项目的依赖管理
maven项目有一个文件叫pom.xml。我们通过在此文件中配置jar包的坐标即可将jar包引入到工程中。Jar包的坐标可从maven仓库中获取。
好处:
通过pom配置来引入jar包,避免了jar包的版本冲突。
Maven团队维护了一个jar包仓库,十分全,避免了去网上寻找jar包的尴尬,节省时间。
2)项目构建
项目构建是一个项目从编写源代码到编译,测试,运行,打包,部署,运行的过程。
● 传统项目构建过程
① 在eclipse中新建一个WEB工程。
② 进行编码及编写配置文件
③ 对源代码进行编译运行,生成class文件
④ 打成war包,部署至tomcat
● Maven项目构建过程
一个命令tomcat:run完成对项目的构建。