maven的安装与配置
1 Maven的作用和定义
1.1 什么是Maven
Maven是Apache基金会下一个跨平台的项目管理工具。服务于Java项目的构建、项目信息管理和依赖管理。
Maven采用了一种称为“POM”(project object model,项目对象模型)的理念来管理项目,所有的项目管理信息都被定义在一个叫做pom.xml的文件中,通过该文件,Maven可以管理项目的依赖的其它开源组件,以及整个项目生命周期,包括编译、构建、测试、发布等等。
目前Java开源世界中大多数项目都采用Maven进行管理,并且放置在Maven的中央里,只要使用Maven就可以简单的添加这些开源框架的依赖。
Maven给我们带来最直接的帮助就是jar包得到了统一的管理。我们只需要知道项目所 “依赖”(需要使用的类库或框架)的Maven坐标,就可以通过互联网上的Maven中央仓库,一口气得到“依赖”的所有jar包以及它继续“依赖”的jar包。Maven不仅提供互联网中央仓库,还给我们提供了本地缓存,一旦使用过的jar包,会在本地缓存下来,下次使用就无需连接互联网了。对于团队开发,Maven还可配置中间的镜像仓库。
1.2 Maven的主要作用
(1)构建通用的Java项目
不同的开发环境下,Java的项目结构或多或少会有些区别,但使用maven创建的项目结构是相同的。
maven-project #项目根目录
src #源码目录
main
java #项目的Java代码
resources #项目配置文件
webapp #web网站根目录
test
java #项目的测试代码
pom.xml #maven配置文件
maven 使用一个名为 “pom.xml” 的配置文件来管理一个Java项目,pom中记录了项目的依赖(所需要的jar包),项目的坐标(名称)、编译方式、打包输出哪些文件,测试和部署方式等等。
<?xml version="1.0" encoding="UTF-8"?>
<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>
<!--项目坐标-->
<groupId>com.xyb</groupId>
<artifactId>mycinema-maven</artifactId>
<version>1.0.0</version>
<!--打包方式-->
<packaging>war</packaging>
<!--统一项目字符集和jdk编译级别-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!-- mysql jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
</dependencies>
<!--编译插件-->
<build>
<!--编译时要打包的资源-->
<resources></resources>
</build>
</project>
(2)引入依赖的jar文件
maven使用称为“坐标”来标识开源世界中的每一个组件,Java几乎所有的开源组件,都可以在maven的中央仓库中找到,通过“坐标”我们可以为自己的项目添加这些组件,组件可能又依赖于其它组件,maven会一口气帮我们引入。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
maven官方依赖查询网站:www.mvnrepository.com
(3)提供了项目管理命令
maven提供了一系列命令,实现项目的编译、测试、打包、部署等功能,使用这些命令,无需复杂的开发环境,我们可以直接的实现项目的开发管理工作。
2 Maven的安装和配置
2.1 环境要求
(1)Windows或CentOS 6.5
(2)JDK 7及以上版本
2.2 下载Maven,解压下载到的压缩包
下载最新版本的Maven:http😕/maven.apache.org/download.cgi
更多Maven版本:https://archive.apache.org/dist/maven/maven-3/
例如:下载Maven 3.5.4版
(1)Windows版:apache-maven-3.5.4-bin.zip
(2)Linux版:apache-maven-3.5.4-bin.tar.gz
Maven是Java基础上开发的,只配置了JDK,Maven解压缩即可使用,为了方便使用,我们也可以未Maven配置环境变量(类似JDK环境变量)。
2.3 配置环境变量
(1)Windows版:配置环境变量:
“我的电脑” > “属性” >"高级系统设置">"环境变量"
创建 M2_HOME 变量:指向Maven的安装目录
修改 PATH 变量:添加
;%M2_HOME%\bin
(2)Linux版:
# 编辑/etc/profile
vim /etc/profile
# 添加环境变量
export MAVEN_HOME=Maven的安装目录
export PATH=${MAVEN_HOME}/bin:$PATH
# 使新增的环境变量生效
source /etc/profile
(3)验证安装结果:
在终端(Linux的Shell 或 Windows的Cmd/PowerShell)输入:
mvn -version
2.4 配置Maven(setting.xml)
Maven安装目录/conf/settings.xml 是 Maven的核心配置文件,定义Maven的全局环境信息。
(1)修改本地仓库位置
默认位置:${user.home}/.m2/repository
配置远程仓库位置修改为:
<localRepository>D:\dev\maven\repository</localRepository>
(2)修改远程仓库
Maven默认使用中央仓库,但中央仓库在国外,访问较慢,为了提高速度,可以使用阿里云镜像加速。
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
3 Maven的使用
3.1 在IDEA中配置Maven
(1)打开IDEA首页并进入“Configure” > “Settings”
(2)为新项目配置maven路径
3.2 使用IDEA创建标准(简单)Maven 项目
(1)创建Project,选择“Maven",不选择骨架(archetype)
(2)为项目定义maven坐标
(3)创建项目后,选择自动导入 ”Enable Auto-Import“
maven 项目的基本结构如下:
上述操作完成后,即创建出一个普通的Maven项目,但并不是Web项目。
(4)在Maven项目中添加Web项目支持
在maven项目添加 “src/main/webapp” 文件夹作为 web的根文件夹(即发布到tomcat的web文件夹)。
把当前项目配置为 maven web项目:
方式一,修改maven项目(pom.xml)的打包方式为 war
<!--修改pom.xml 打包方式-->
<packaging>war</packaging>
方法二,直接未Maven项目添加Web模块支持
点击 “Project Structure”,选择“Modules”,点击“+”,选择“Web”;
修改 Web 文件夹相关路径“.../src/main/webapp/...”。
在 webapp 目录中添加 /WEB-INF/web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
(5)指定编译级别并添加Maven开发依赖
<!--统一项目字符集和jdk编译级别-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<!-- mysql jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<!-- Junit测试,可选,仅用于单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
(6)把项目部署到Tomcat
添加 “Run/Debug” 配置
添加 “Tomcat Server” > “Local” 配置
点击运行
3.3. 使用Maven “quickstart” 骨架
3.4 使用Maven “webapp” 骨架
3.5 Maven常用命令
Maven提供了一些列指令来实现项目的编译、测试、安装和发布等功能。
在IDEA中,通过菜单 “View” > “Tool Windows” > “Maven” 打开Mave操作界面,可以看到这些指令。
命令 | 描述 |
---|---|
clean | 清除项目编译后的文件 |
validate | 验证工程是否正确、所有需要的资源是否可用。可以验证pom.xml文件的正确性 |
compile | 编译项目 |
test | 执行项目中的测试用例 |
package | 将项目打包 |
verify | 运行任何检查,验证包是否有效且达到质量标准 |
install | 将项目打包进本地仓库 |
site | 生成项目的网页形式的文档 |
deploy | 将项目打包发布到远程仓库 |
上述命令也可以在命令行(shell或CMD)中执行
mvn clean #清除编译结果
mvn compile #编译源代码
mvn test-compile #编译测试代码
mvn test #运行测试
mvn package #打包
mvn install #安装到本地仓库
4 Maven项目配置文件(pom.xml)常见配置节点
节点 | 含义 |
---|---|
project | pom文件顶级元素 |
modelVersion | pom模型版本 |
groupId | 项目组织的唯一表示,常见为公司名或域名倒写 org.apache |
artifactId | 项目唯一表示,对应项目名称 |
version | artifactId的版本号,如1.0.0-SNAPSHOT,SNAPSHOT表示快照版,RELEASE表示发行版 |
name | 项目的展现名称,在maven生成文档中使用 |
url | 项目主页URL,在maven生成文档中使用 |
description | 项目的表述,在maven生成文档中使用 |
packaging | 项目打包方式,一般为jar或war |
parent | 项目的父依赖,类似Java继承,当前项目可以继承父依赖中配置的依赖和属性;需要指定父依赖的groupId、artifactId、version和relativePath |
dependencies | 定义此项目所依赖的关系集,在子节点dependency中添加具体的依赖 |
dependency | dependencies的子节点,配置具体的依赖,需要指定具体依赖的groupId、artifactId、version,以及一些扩展配置如scope(compile/provided/runtime/test/system)optional(false / true) |
properties | 定义一些常量,可在pom文件的其他地方引用 |
build | 构建选项,描述如何编译和打包项目,具体工作通过plugin完成:maven-clean-plugin、maven-resources-plugin、maven-compiler-plugin、maven-surefire-plugin、maven-war-plugin 或 maven-jar-plugin、maven-install-plugin、maven-deploy-plugin |