1. 定义
Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
2. 作用
1. 依赖管理
即:maven工程对jar包的管理过程。
传统web项目,我们必须将工程所依赖的jar包复制到工程中,导致工程变得很大;
maven工程中不直接将jar包导入到工程中,而是通过在pom.xml文件中添加所需jar包的坐标,在需要用到jar包的时候,只要查找pom.xml文件,再通过pom.xml文件中的坐标,到一个专门用于“存放jar包的仓库”中根据坐标从而找到这些jar包,再把这些包拿去运行。
2. 项目的一键构建
指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程称为构建。
一键构建指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
3. 使用
1. 安装
通过Maven官网进行下载,具体下载版本如下:
1) bin代表二进制class文件(由java文件编译而成),src代表源码(java源码),源码source比binary大一些,一般正常使用下载bin类型即可,如果要学习源码下载src类型。
2) .tar.gz是linux的压缩包,.zip是windows的压缩包
bin.tar.gz是适用于linux、MacOsX系统的二进制文件
bin.zip是适用于windows的二进制文件
src.tar.gz是linux下的源码
src.zip是windows的源码
只需在windows正常使用maven时,下载第二个:
Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下;
bin:存放了maven的命令
boot:存放了一些maven本身的引导程序,如类加载器
conf:存放了maven的一些配置文件,如setting.xml
lib:存放了maven本身运行所需要的jar包
环境变量配置
1)新增变量 MAVEN_HOME ,变量值就是你的 maven 安装的路径
2)配置变量Path,将%MAVEN_HOME%\bin追加到Path变量中
注意:maven需要电脑上首先安装java环境,JDK1.7+版本
测试;打开命令窗口,输入:mvn -v,显示版本信息即安装完成
2. Maven仓库
本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找;
远程仓库(私服):如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载;
中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件;
在 MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置,将localRepository标签中的内容调整为本地仓库地址,即:<localRepository>D:\my_java\maven_repository</localRepository>
国内从中央仓库下载文件速度非常慢,可以使用阿里云镜像,即在mirrors中配置:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3. Maven工程
一个 maven 工程,它的 src 目录和 pom.xml 是必备的
src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
src/main/webapp —— 页面资源, js、css、图片等(web项目)
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
4. Maven常用命令
1)mvn compile:编译命令,作用是将src/main/java文件夹下的文件编译为class文件输出到target目录下
2)mvn clean:清理命令,执行clean会删除target目录及内容
3)mvn test:测试命令,会执行src/test/java文件夹下的单元测试类
4)mvn package:打包命令,对于java工程执行package打包程jar包,对于web工程打包程war包
5)mvn install:安装命令,执行install命令将maven打成jar包或者war包发布到本地仓库
当后面的命令执行时,前面的操作过程也都会自动执行。
5. Maven指令的生命周期
maven 对项目构建过程分为三套相互独立的生命周期
清理生命周期:clean,在进行真正的构建之前进行一些清理工作
默认生命周期:compile\test\package\install\deploy,构建的核心部分
站点生命周期:生成项目报告,站点,发布站点
6. Maven概念模型
Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
1. 项目对象模型 (Project Object Model)
一个maven工程都有一个pom.xml文件,xml文件包含:
项目自身信息
项目运行所依赖的jar包信息
项目运行环境,如:jdk、tomcat等
2. 依赖管理系统(Dependency Management System)
项目对象模型中的项目运行所依赖的jar包的管理独立出来叫依赖管理模型
通过maven的依赖管理对项目所依赖的jar包进行统一管理
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
jar包的坐标有三部分组成:
1)公司组织的名称(groupId),如:javax.servlet.jsp
2)项目名(artifactId),如:jsp-api
3)版本号(version),如:2.0
3. 一个项目生命周期(Project Lifecycle)
使用 maven 完成项目的构建,项目构建包括:
清理生命周期:清理(clean)
默认生命周期:编译(compile)、测试(test)、打包(package)、安装(install)、部署(deploy)
每一个构建项目的命令都对应了maven底层的一个插件
4. 一组标准集合
maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等
5. 插件(plugin)目标(goal)
maven 管理项目生命周期过程的那些命令都是基于底层插件完成的
4. idea开发maven项目
1. idea的maven配置
通过File-Settings配置maven,直接搜索找到maven对应的配置项内容
1)Maven home directory:指定本地maven安装目录
2)User settings file:指定setting配置文件路径,即MAVEN_HOME\conf\settings.xml
3)Local resposityory:自动根据配置文件路径检测本地仓库路径
配置项:Maven-Runner
VM Options:-DarchetypeCatalog=internal -Dfile.encoding=GB2312(防止中文乱码)
使用maven骨架创建maven工程时,需要远程下载所需的插件,为方便我们在不联网状态下创建maven工程,配置VM Options参数,只要之前我们联网下载过相关创建工程的插件,就会直接从本地找到对应插件,而不用再去网络下载
2. 使用骨架创建maven的java工程
1)通过:New Project-Maven创建
2)勾选:Create from archetype选择框,从idea提供的骨架中选择quickstart,快速创建工程
3)项目名称:名称
项目目录:目录
单位名称(GroupId):
项目名称(ArtifactId):
版本号(Version):
4)再次确认Maven home directory(Maven安装目录)、User settings file(配置文件目录)、Local respository(本地仓库)
点击完成,即可完成创建,第一次创建会很慢,要下载依赖的插件
目录结构:
3. 不使用骨架创建maven的java工程
类似使用骨架创建,只是在第二步的时候,不勾选Create from archetype选择框
建议不适用骨架创建,目录结构相对完整
4. 使用骨架创建maven的web工程
参照使用骨架创建项目,在第二步的时候,选择的骨架为webapp,其他操作没有区别
目录结构不完整,需要自己补充完整
1)创建对应目录:src/main/java 通过右键-Mark Directory as 属性,设置为:Sources Root
2)创建对应目录:src/main/resources 通过右键-Mark Directory as 属性,设置为:Resources Root
3)创建对应目录:src/test/java 通过右键-Mark Directory as 属性,设置为:Test Sources Root
4)创建对应目录:src/test/resources 通过右键-Mark Directory as 属性,设置为:Test Resources Root
默认只有在webapp下面才能创建jsp文件,可以通过:File-Project Structure-Project Settings-Modules进行配置修改
选中当前项目对应的Web,在Web Resource Directories中,增加/删除要创建jsp文件的目录
5. 导入项目依赖的jar包
1. 格式
在 pom.xml 文件添加坐标,可以通过idea的提示功能完成坐标的添加,如:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. 坐标的来源方式
通过搜索maven中央仓库,找到对应的jar包,把坐标拷贝到pom.xml文件
3. 依赖范围
1)compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围,编译范围的依赖会用在
编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包
2)provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依
赖在编译和测试时需要,在运行时不需要,比如:servlet api、jsp api 被 tomcat 容器提供
3)runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要,比如:jdbc
的驱动包,由于运行时需要所以 runtime 范围的依赖会被打包
4)test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,
比如:junit,由于运行时不需要所以 test范围依赖不会被打包
5)system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR
文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用
6.工程运行环境修改
1)添加tomcat7插件
2)添加jdk插件
通过File-Settings-Live Template自定义模板
1)进入Live Template目录
2)添加自定义Template Group:custom
3)添加Live Template,比如本例中的tomcat7插件
4)设置自定义模板的缩写(Abbreviation):tomcat7
5)设置自定义模板内容(Template text):上图配置的插件内容
6)定义模板适用范围:一般用于xml文件
7)使用:直接在xml文件中输入tomcat7,即可将模板内容写入配置文件
7. pom 基本配置
pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:
<project>:文件的根节点
<modelVersion>:pom.xml 使用的对象模型版本
<groupId>:项目名称,一般写项目的域名
<artifactId>:模块名称,子项目名或模块名称
<version>:产品的版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本
<packaging>:打包类型
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom:用于 maven 工程的继承,通常父工程设置为 pom
<name>:项目的显示名,常用于 Maven 生成的文档
<description>:项目描述,常用于 Maven 生成的文档
<dependencies>:项目依赖构件配置,配置项目依赖构件的坐标
<build>:项目构建配置,配置编译、运行插件等