文章目录
文章目录
Maven基础使用相关知识。
一、Maven简介:
1、介绍
- Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
- 什么是Maven?
- 简要的说Maven 是专门用于构建和管理Java相关项目的工具;Maven 本质上是一个插件执行框架,所有的工作都是由插件完成的。
- 为什么要用它?
- 使用Maven管理的Java 项目都有着相同的项目结构。 有一个pom.xml 用于维护当前项目都用了哪些jar包;所有的java代码都放在 src/main/java 下面; 所有的测试代码都放在src/test/java 下面 。
- 便于统一维护jar包。
2、环境配置
项目 | 要求 |
---|---|
JDK | Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 |
Maven 下载地址(官方文档):官方下载,Maven是Java编写的,要想使用maven必须安装jdk。
-
第一步:进入官网
-
第二步:配置环境变量
-
通过
mvn --version
来测试是否成功,成功会打印出安装的 Maven 版本! -
之后就可以使用了!
Linux和Mac请观看:菜鸟教程详细教学。
3、Maven的安装
- 获取安装包,zip文件
- 解压缩文件,到-个目录,非中文目录
- 配置环境变量,如上
5.测试maven的安装,使用mvn -v,查看maven的版本信息
4、Maven的构建
- Maven的构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
- maven支持的构建包括有:
- 清理:把之前项目编译的东西删除掉,我新的编译代码做准备。
- 编译:把程序源代码编译为执行代码,java-class文件批量的,maven可以同时把成千.上百的文件编译为class。javac不一-样,javac一 次编译一个文件。
- 测试:maven可以执行测试程序代码,验证你的功能是否正确。批量的,maven同时执行多个测试代码,同时测试很多功能。
- 报告:生成测试结果的文件,测试通过没有。
- 打包:把你的项目中所有的class文件,配置文件等所有资源放到一一个压缩文件中。这个压缩文件就是项目的结果文件,邇常java程序,压缩文件是jar扩展名的。对于web应用,压缩文件扩展名是. war。
- 安装:把5中 生成的文件jar, war安装到本机仓库
- 部署:把程序安装好可以执行。
二、Maven的核心概念
1、Maven 的核心概念简单介绍
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从Maven的九个核心概念入手:
- POM
- 约定的目录结构
- 坐标
- 依赖管理
- 仓库管理
- 生命周期
- 插件和目标
- 继承(了解)
- 聚合(了解)
想要用好maven就得了解这些概念。
2、概念一:POM
-
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件(pom.xml),包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
-
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
-
maven把一个项目当做一个模型使用。POM控制maven构建项目的过程,管理jar依赖。.
-
所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
3、概念二:约定的目录结构
-
Maven的目录和文件的位置都是固定的。
-
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,尽可能的遵守这样的目录结构。如下所示:
Maven工程约定目录结构
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
4、概念三:坐标
-
Maven的仓库中拥有着无数的构件,每一个构件都是一个jar或者war等文件,如果没有坐标,那么我们将无法唯一标识该构件,结果就是Maven将无法帮助我们自动下载构件。所以,Maven定义了一组规则:世界上任何一个构件都可以使用Maven坐标来唯一标识。Maven坐标的主要元素包括groupId,artifactId,version,packaging(可选)和classifier(可选),通过这些元素,我们可以明确标识任何一个构件。
- groupId:该元素定义了当前Maven项目隶属的实际项目,一般情况下该项元素都与公司域名相对应。(公司域名倒写)
- artifactId:该元素定义了实际项目中的一个Maven Module(自定义项名称)
- version:该元素表示当前构件的版本,包括稳定(release)版本和测试(snapshot)版本(自定义版本)
- packaging:该元素定义Maven项目的打包方式,默认为jar,还有war和pom方式(压缩文件扩展名设置)
- classifer(目前用不到):该元素用来帮助定义构件输出的一些附属构件,例如通过配置插件,可以在打包的同时生成-javadoc.jar和sources.jar 等构件。
-
案例:
<groupId>org.example</groupId> <artifactId>Maven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging>
5、概念四:依赖管理
- 这是很通常情况下,当一个库说A就依赖于其他库说B的情况下,另一个项目Ç想用A,则该项目需要使用库中B。在Maven帮助下以避免这样的要求来发现所有需要的库。 Maven通过读取依赖项项目文件(pom.xml中),找出它们的依赖等。我们只需要在每个项目POM定义直接依赖关系。 Maven自动处理其余部分。
6、概念五:仓库管理(了解)
- 在 Maven 的术语中,仓库是一个位置(place,Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
- 在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
- Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
- Maven 仓库有三种类型:
- 本地仓库(local):运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
- 默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。
- Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
- 中央(central):
- Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
- 中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
- 中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。
- 远程(remote):Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
- 本地仓库(local):运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
- 依赖的范围(常用的有三个)
- compile :默认,在构建的编译,测试,打包,部署需要。
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:参与
- test :只在测试阶段使用
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
上面的参与不参与可以用下图表示。
- provided :在部署时,有服务器提供,项目本身不需要自带。
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 是否参与部署:不参与
- 典型的例子:servlet-api.jar
- compile :默认,在构建的编译,测试,打包,部署需要。
7、概念六:生命周期
- maven将项目的生命周期抽象成了3套生命周期,每套生命周期又包含多个阶段
- clean生命周期
- default生命周期
- site生命周期
(1)clean生命周期(了解):当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
(2)default生命周期(又称Build生命周期):
- 这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段(主要看这7个阶段):
-
阶段 处理 描述 验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的 编译 compile 执行编译 源代码编译在此阶段完成 测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。 包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包 检查 verify 检查 对集成测试的结果进行检查,以保证质量达标 安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用 部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 -
当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
(3)site生命周期(了解):
Maven Site 插件一般用来创建新的报告文档、部署站点等。
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
8、概念七:插件和目标
-
Maven 本质上是一个插件执行框架;所有的工作都是由插件完成的。正在寻找要执行的特定目标?此页面列出了核心插件和其他插件。有构建和报告插件:
- 构建插件将在构建期间执行,它们应该
<build/>
在 POM的元素中进行配置。 - 报告插件将在站点生成期间执行,它们应该
<reporting/>
在 POM的元素中进行配置。因为报告插件的结果是生成站点的一部分,所以报告插件应该国际化和本地化。
- 构建插件将在构建期间执行,它们应该
-
Maven中一些插件的使用方法:官网.
9、Maven中的常用命令
- maven独立使用,通过命令,完成maven的生命周期的执行.
- maven可以使用命令,完成项目的清理,编译,测试等等
1.mvn clean 清空产生的项目( target里)
2.mvn compile 编译源代码
3.mvn install 在本地repository中安装jar(包含mvn compile,mvn package,然后上传到本地仓库)
4.mvn deploy 上传到私服(包含mvn install,然后,上传到私服)
5.mvn package 打包
6.mvn test 运行测试
7.mvn site 产生site
8.mvn test-compile 编译测试代码
9.mvn -Dtest package 只打包不测试
10.mvn jar:jar 只打jar包
11.mvn test -skipping compile -skipping test-compile 只测试而不编译,也不测试编译
12.mvn deploy
13.mvn source.jar 源码打包
三、基于idea使用Maven
1、在idea中设置Maven。
-
idea中内置了maven,一般不使用内置的,因为用内置修改maven的设置不方便。使用自己安装的maven,需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
-
配置:
-
配置当前工程的设置:
在File—setting中:
–Build Tools-- -Maven- - - Runner
maven项目创建时,会联网下载模版文件,比较大,使 用archetypeCatalog=internal,不用下载,创建maven项 目速度快。 -
配置以后新建工程的设置:
在File—other setting----Setting For New Project中:
和上面的步骤一样。
-
2、创建第一个JavaSE项目:
-
第一步:
-
第二步:
-
第三步:
如果没有配置Maven位置,可以在这配置,如果配置好了,直接就可以使用了。
3、创建第一个JavaWeb项目
(1)第一种:在已经创好的javaSE项目中:右击项目名字-----Add Framework Support----钩住Web Application----点击ok
(2)第二种:在创建Maven项目的时候,勾选Web-app模板