1. Maven概念模型
- 项目对象模型(Project Object Mobel)
通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。每个maven工程中都有一个pom.xml文件(核心配置文件),该文件里面定义了工程所依赖的jar包、本工程的坐标、打包运行方式等。 - 依赖管理系统(Dependency Management System)
maven的基础核心,通过定义项目所依赖组件的坐标由maven进行依赖管理。也即maven通过坐标对项目工程所依赖的jar包进行统一规范的管理。
比如:项目依赖Struts2.3.24,通过在pom.xml中定义依赖即可将Struts2的jar包自动加入到工程中,pom.xml中定义依赖如下:<dependency> <groundId>org.apache.struts</groundId> <artifactId>struts2-core</artifactId> <version>2.3.24</version> </dependency>
-
一个项目生命周期(Project Lifecycle)
一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(也是一个项目构建工具)脚本自动完成,maven将项目的生命周期抽象统一为:清理、初始化、编译、测试、报告、打包、部署、站点生成等。
图2.png
maven就是要保证一致的项目构建流程,通过执行一些简单命令即可实现上边生命周期的各个过程。
- 一组标准集合
maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
我在这儿还是强调一遍:maven工程有自己标准的工程目录结构、有标准的坐标定义。 - 插件(plugin)目标(goal)
maven管理项目生命周期过程都是基于插件完成的。
2. maven的仓库
maven工作需要配置仓库,本地的项目A、项目B等通过maven从远程仓库(可以理解为互联网上的仓库)下载jar包并保存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下面描述了maven中仓库的类型:
- 本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
- 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认从远程仓库下载。
- 中央仓库:在maven环境内部内置一个远程仓库地址:
http://repo1.maven.org/maven2
,它是中央仓库(即特殊的远程仓库),服务于整个互联网,它是由maven团队自己维护的,里面由大量的常用类库,并包含了世界上大部分流行的开源项目构件。
3. 安装
1). 下载和安装--下载地址
- bin目录:mvn.bat(以run方式运行项目)、mvnDebug.bat(以debug方式运行项目)
- boot目录:maven运行需要的类加载器
- conf目录:settings.xml,整个maven工具的核心配置文件
- lib目录:maven运行依赖的jar包
2). 配置环境变量
I. 新建环境变量
II. 将
%MAVEN_HOME%\bin
添加到path环境变量中III. 测试
在命令提示符中输入命令--
mvn -v
3). 本地仓库配置
本地仓库是用来存放联网下载的maven插件和jar包,maven本地仓库有的jar包将不再从互联网下载,所以本地仓库就相当于一个缓存。
在maven的安装目录中的conf目录下有一个settings.xml文件,在这个文件中可配置本地仓库
如果本地仓库不配置(那么就会从互联网上下载jar包,而且下载速度贼慢),那么默认的本地仓库的位置就是{user.home}表示windows用户目录,在win7系统下如下:
- 全局settings配置文件:就是maven的安装目录中的conf目录下的settings.xml文件。该文件里面的所有配置可应用于所有项目。
- 用户settings配置文件:在${user.home}/.m2/repository目录下。如果某些用户需要对maven特殊设置,用户可以自定义settings文件
4). eclipse配置maven安装程序
高版本的eclipse默认已经集成了maven的插件,但其实还内置了maven程序,Window->Preferences,搜索maven如下:
注意:我们一般不用内置的maven程序,原因是为了在项目中统一maven版本
5). 选择指定的maven程序
点击Add...->>然后选择自己电脑中的maven程序->>点击Finish。
然后勾选新增的一项。
6). 指定User Settings
点击User Settings->点击Browse...选择settings.xml文件->点击Update Settings,在Local Repository一项会自动填充仓库位置->点击Apply->OK。
7). Eclipse浏览本地仓库
Window->Show View->Other->Maven->Maven Repositories.
4. 测试项目
1). 新建项目
I. File->Other->Maven->Maven Project->Next
II. 勾选Use default Workspace location是将工程创建在默认的路径下
III. 点击最后一项->Next
- maven-archetype-quickstart: 普通Java工程
-
maven-archetype-webapp: Web工程
IV. 配置信息->点击Finish.
图18.png - Group Id:项目的名称,项目名称以域名的倒序命名(类似java包名),比如我们要创建一个CRM的项目,可写为cn.itcast.crm。
- Artifact Id:模块名称(子项目名称)。
- Version:项目当中模块的版本,snapshot(快照版或测试版,没有正式发行)、release(正式发行版本)。
- Package:包名。Group Id + Artifact Id.
V. 解决错误
图19.png
错误原因:未Server Runtime.
解决办法:邮件项目->Build Path->Configure Build Path...->Libraries->Add Library...->Next->apply..
图20.png
图21.png
VI. 项目结构
图21.png
*注意:新创建的maven工程的目录结构不是一个完整的目录结构。
maven工程的一个完整的目录结构为:
project
/src/main/java 主体程序的java源文件(不要放配置文件)
/src/main/resources 主体程序所需要的配置文件(不要放java文件)
/src/test/java 单元测试程序的java源文件
/src/test/resources 单元测试程序所用的配置文件
/target 编译输出目录
/pom.xml
2). 配置
I. 设置maven的编译版本,由于我使用的是JDK1.8,所以要设置maven的编译版本为1.8,即要在maven工程的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mazaiting.cmp</groupId>
<artifactId>MavenTest</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MavenTest Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>MavenTest</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
maven运行的时候都是依赖于插件的,包括编译也是需要通过插件——org.apache.maven.plugins(该插件就在你的本地仓库)来完成。
II. 添加完如上配置之后,可发现我们的maven工程上面有一个红叉,如下所示:
III. 更新项目。右键项目->Maven->Update Project...