Maven简介
Maven是什么
- Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
- 在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven历史
- Maven最初设计,是以简化Jakarta Turbine项目的建设。在几个项目,每个项目包含了不同的Ant构建文件。 JAR检查到CVS。
- Apache组织开发Maven可以建立多个项目,发布项目信息,项目部署,在几个项目中JAR文件提供团队合作和帮助。
Maven目标
- Maven主要目标是提供给开发人员:
- 项目是可重复使用,易维护,更容易理解的一个综合模型。
- 插件或交互的工具,这种声明性的模式。
- Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。
- Apache Maven 是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库。
Maven核心功能
- 传统项目的问题:
- 需要把jar复制到项目中,繁琐
- 项目体积更大,不利于维护
- 不利于团队开发
- Maven主要有两大核心功能:
- 依赖管理。(jar包的管理)
- 项目构建。(清理、编译、单元测试、打包、安装、部署、运行)
Maven入门
Maven程序目录结构
- 约定大于配置:能使用约定好的方式,就不要配置。
- 目录结构:
maven_hello
—-src
——-main
———-java
————-com
—————–xxx
——————–Hello.java
———-resources
———-webapp (web项目)
——-test
———-java
————-com
—————–xxx
——————-test
———————-HelloTest.java
———-resources
—-pom.xml
- 文件作用:
- src/main/java:存放项目的.java文件
- src/main/resources:存放项目资源文件。如配置文件
- src/test/java:存放所有测试的.java文件.如Junit测试类
- src/test/resources:测试资源文件
- target:项目输出位置(可以自动生成)】
- pom.xml(maven项目核心配置文件)
使用命令创建(了解)
mvn archetype:generate -DgroupId=com.xxx.maven -DartifactId=maven02 -DinteractiveMode=false -DarchetypeCatalog=internal
- 解释(按顺序)
- (1)项目组的编号
- (2)项目的名称
- (3)交互模式(false使用默认的,true需要手动输入信息)
- (4)使用maven内部骨架
Maven常见命令
- 构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。
- 每个maven命令都有相对于的插件来完成。
clean
- mvn clean:清理(删除)编译的文件
- 使用插件:maven-clean-plugin:2.5:clean
compile
- mvn compile:编译主目录的文件
- 使用插件:
- maven-resources-plugin:2.6:resources
- maven-compiler-plugin:3.1:compile
test
- mvn test: 编译并运行test目录的代码
- 使用插件:
- maven-resources-plugin:2.6:resources
- maven-compiler-plugin:3.1:compile
- maven-resources-plugin:2.6:testResources
- maven-compiler-plugin:3.1:testCompile
- maven-surefire-plugin:2.12.4:test
package
- mvn package:打包项目,jar包或war包
- 使用插件:
- maven-resources-plugin:2.6:resources
- maven-compiler-plugin:3.1:compile
- maven-resources-plugin:2.6:testResources
- maven-compiler-plugin:3.1:testCompile
- maven-surefire-plugin:2.12.4:test
- maven-jar-plugin:2.4:jar
install
- mvn install:安装到仓库
- 使用插件:
- maven-resources-plugin:2.6:resources
- maven-compiler-plugin:3.1:compile
- maven-resources-plugin:2.6:testResources
- maven-compiler-plugin:3.1:testCompile
- maven-surefire-plugin:2.12.4:test
- maven-jar-plugin:2.4:jar
- maven-install-plugin:2.4:install
其他命令
mvn deploy
:部署,部署到私服。mvn tomcat:run
:运行
Maven构建生命周期
- Clean:项目构建前的清理操作
- Default(Build): 核心生命周期核心过程:编译,测试,运行,打包等等
- Site:项目站点文档创建。
- 详细的生命周期,请移步【易百教程】
Maven POM文件
- POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
- 执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
- POM 中可以指定以下配置:
- 项目依赖
- 插件
- 执行目标
- 项目构建 profile
- 项目版本
- 项目开发者列表
- 相关邮件列表信息
- 所有 POM 文件都需要 project 元素和三个必需元素:groupId,artifactId,version。这个必须元素叫做坐标(GAV)
- 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"> <!-- 模型版本 --> <modelVersion>4.0.0</modelVersion> <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group --> <groupId>com.companyname.project-group</groupId> <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --> <artifactId>project</artifactId> <!-- 版本号 SNAPSHOT 快照版 RELEASE 发布版--> <version>1.0-SNAPSHOT</version> <!--打包形式 例如jar、war、ear、pom--> <packaging>jar</packaging> </project>
Maven引入外部依赖
- pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。
- 在该网站上搜索需要的依赖:Maven官方网站
- 代码示例:
<dependencies> <!--坐标GAV--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!-- 版本 --> <version>4.12</version> <!--依赖范围--> <scope>test</scope> </dependency> </dependencies>
如何把第三方jar包安装的本地仓库
- 安装指定文件到本地仓库命令:
- mvn install:install-file
- -DgroupId=
: 设置项目代码的包名(一般用组织名) - -DartifactId=
: 设置项目名或模块名 - -Dversion=1.0.0 : 版本号
- -Dpackaging=jar : 什么类型的文件(jar包)
- -Dfile=
: 指定jar文件路径与文件名(同目录只需文件名)
- 示例:安装ValidateCode.jar包(在该jar包所在文件中执行该命令)
mvn install:install-file -DgroupId=com.xxx -DartifactId=validatecode -Dversion=1.0.0 -Dpackaging=jar -Dfile=ValidateCode.jar
Scope
- Scope:声明jar包的存活时间
- 取值说明:
- provided:编译和测试时需要,打包和运行不需要。例如servlet-api、jsp-api
- compile:编译、测试、运行、打包需要 例如druid、dbutils、fileupload
- runtime:测试、运行、打包需要 例如mysql驱动
- test:测试。例如junit
- system:编译和测试时需要,显示引用,Maven不会检索
依赖范围详细介绍
- A依赖B,需要在项目A的pom.xml文件中添加项目B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
- (1)
compile:
编译范围, 编译范围的依赖会在编译,测试,运行,打包(war)都会使用依赖jar包- (2)
provided
:提供依赖,provided依赖在编译,测试时需要,运行,打包都不会包含。- (3)
runtime
:运行依赖,runtime依赖在运行、测试、打包的需要,但在编译的时候不需要,比如:jdbc的驱动包- (4)
test
:测试依赖,在编译和运行时不需要,他们只有在测试编译和测试运行时使用, 比如junit,也不会被打包- (5)
system
:系统依赖,system依赖与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
表格展示
依赖范围 | 编译 | 测试 | 运行 | 打包(war) | 例子 |
---|---|---|---|---|---|
compile | yes | yes | yes | yes | beanutils、fileupload |
test | no | yes | no | no | junit |
provided | yes | yes | no | no | serlvet-api、jsp-api |
runtime | no | yes | yes | yes | jdbc驱动 |
system | yes | yes | no | no | 本地jar包。maven仓库之外的jar包 |
- 注意:打包jar包时,不会包含任何依赖包的。
- 默认依赖范围:compile
- 依赖范围由强到弱的顺序是:compile–>provided–>runtime–>test