Maven笔记(一)-基础使用
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
- 提供了一套标准化的项目结构
Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用。
- 提供了一套标准化的构建流程(编译,测试,打包,发布……)
- 提供了一套依赖管理机制
依赖管理其实就是管理你项目所依赖的第三方资源 (jar包、插件…)
- 以前的操作流程: 需要手动去导入jar包,过程非常繁琐
- 使用Maven管理jar包:
Maven 使用标准的坐标配置来管理各种依赖,只需要简单的配置就可以完成依赖管理
常见的项目构建工具使用占比情况:
一、Maven简介
官网:https://maven.apache.org/
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
1.1 Maven模型
- 项目对象模型
每个项目在 pom.xml 文件中都有自己的唯一标识。
- 依赖管理模型
- 插件(plugin)
打包插件、编译插件…
1.2 Maven仓库
- 仓库的分类:
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球开源唯一的仓库,地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库,存放一些含有版权的Jar
当项目中 pom.xml 使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包,如果有,则在项目直接引用;如果没有,则去中央仓库中下载对应的jar包到本地仓库。
还可以搭建远程仓库,将来jar包的查找顺序则变为:本地仓库 -> 远程仓库 -> 中央仓库
二、Maven安装配置
Maven安装直接进入官网进行下载(下载地址:http://maven.apache.org),选择zip格式的压缩文件,解压后即可使用。
解压出来之后的Maven工具目录结构如下:
2.1 配置Maven环境变量
- 环境变量设置中的 系统变量中添加MAVEN_HOME
- 在系统变量里的Path变量内部添加MAVE_HOME
- 打开CMD终端测试配置情况
命令:mvn -version
2.2 配置Maven 本地仓库
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ****标签内容。为 标签指定目录文件夹,用于存放依赖。
注:Maven本地仓库在配置前都会有一个默认仓库地址C:/用户/super/.m2/repository
。默认仓库地址是在C盘下,所有这里建议调整一下。
2.3 配置阿里云私服
私服的配置是为了提高项目中jar包的下载速度,阿里云私服对于中央仓库来说下载速度更快。
修改 Maven 工具目录下面的** conf/settings.xml**文件中的 ** **标签内容。
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
三、Maven基本使用
3.1 Maven的常用命令
**PS:**这里简单的创建了一个Mavn项目,然后通过执行下面命令查看执行效果:
- MavenTest类中代码
package org.myself;public class MavenTest {public static void main(String[] args) {System.out.println("Hello World ~~!");}
}
- TestMaven :test文件夹下的测试类代码
package org.myself;
import org.junit.Test;
public class TestMaven {@Testpublic void testAAA(){System.out.println("======== Maven test 执行~!========");}
}
- 项目中 pom.xml 文件中内容
<?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>org.myself</groupId><artifactId>maven_demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!-- 导入依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency></dependencies><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.10</version><configuration><!--<includes><include>**\*</include></includes>--><!--<skipTests>true</skipTests>--></configuration></plugin></plugins></build></project>
执行命令时,需要cmd到对应项目中 pom.xml 所在目录下进行命令操作
在Maven项目目录下( pom.xml 文件所在目录层级中),进入cmd命令终端,然后执行下列命令。
mvn compile
编译命令
在项目目录下,执行 mvn compile 命令后会对项目进行编译操作,首先Maven工具会去自动下载需要用到的编译插件。然后会在私服/中央仓库中 下载 pom.xml 文件中所依赖jar 到本地仓库中。
编译完成之后,项目文件夹中会增加一个 target 文件目录,该文件中就存放了当前项目编译后的 java.class 字节码文件。
mvn clean
清理
清理命令主要作用是用来删除 执行编译命令 mvn compile时所生成的 target文件。同时Maven也会自动去下载一些clean插件。
mvn test
测试
用于执行项目中 test文件目录下的 Java 测试代码,会在控制台中对应输出测试类中的打印数据。
mvn package
打包命令
主要作用是将项目代码编译成class文件,然后打包生成对应的jar包 (java项目打成jar包 / Web项目打成war包 [后续介绍]),项目目录中同样会生成一个 target文件目录,该target文件中就存放了打包生成的jar文件。
同样执行命令时,Maven会自动下载打包所需要的插件。
mvn install
安装
命令作用是将当前项目,安装到本地仓库中,然后本地仓库中就会对应生成该项目的jar包。
3.2 Maven的生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项目构建的生命周期划分为3套,分别为 clean、default、site:
- clean:清理工作
- default:核心工作
例如编译、测试、打包、安装等。
- site:产生报告,发布站点等
同一生命周期内,执行后边的命令,前边的所有命令会自动执行。
default 构建生命周期 (除了几个常用命令,其余大部分命令都很少使用到)
- validate(校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
- initialize(初始化):初始化构建状态,比如设置属性值。
- generate-sources(生成源代码):生成包含在编译阶段中的任何源代码。
- process-sources(处理源代码):处理源代码,比如说,过滤任意值。
- generate-resources(生成资源文件):生成将会包含在项目包中的资源文件。
- process-resources (处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
- compile(编译):编译项目的源代码。
- process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
- generate-test-sources(生成测试源代码):生成包含在编译阶段中的任何测试源代码。
- process-test-sources(处理测试源代码):处理测试源代码,比如说,过滤任意值。
- generate-test-resources(生成测试资源文件):测试创建资源文件。
- process-test-resources(处理测试资源文件):复制和处理测试资源到目标目录。
- test-compile(编译测试源码):编译测试源代码到测试目标目录.
- process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
- test(测试):使用合适的单元测试框架运行测试(Juint是其中之一)。
- prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
- **package(打包):**将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
- pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
- integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
- post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
- verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
- install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
- deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享。
四、IDEA 配置 Maven
- 选择 IDEA 中 File --> Settings
- 搜索 maven( 在Build… -> Build Tools -> Maven 中设置)
- 设置IDEA 使用本地安装的maven,并修改配置文件路径
4.1 Maven坐标
Maven坐标上资源的唯一标识,使用坐标来定义项目或者引入项目中需要的依赖。
- Maven 坐标的主要成分
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写 eg:com.item)
- artifactId:定义当前Maven项目名称(通常是模块名称 eg:order-server、goods-server)
- version:定义当前项目版本号
eg:项目定义坐标
eg:项目引入坐标
4.2 Maven项目中打印输出乱码解决方案
- Help --> Edit Custom Vm Options 中添加 Dfile.encoding = utf-8
- File --> Settings --> File Encodings 中的三个选项设置为 UtF-8
- File --> Setting --> Runner 中的 VM Options 设置为:-Dfile.encoding=GB2312
五、Maven 依赖管理
5.1 使用坐标导入jar
5.1.1 使用坐标导入jar包
- 中 pom.xml 中编写 标签
- 在 标签中使用 引入坐标
- 定义坐标的 groupId, artifactId,version
- 点击刷新按钮,使坐标生效
5.1.2 使用坐标导入jar包 - 快捷方式
- 中 pom.xml 中 按 alt + insert ,选择 Dependency
- 中弹出的面板中搜索对应坐标,然后双击选中对应坐标
- 点击刷新按钮,使坐标生效
5.1.3 自动导入设置,不需要中每次都进行手动刷新
- 选择 IDEA 中 File --> Settings
- 中弹出的面板中点击 Build Tools
- 选择 Any changes ,点击ok即可生效
5.2 依赖范围
通过设置坐标的范围(scope),可以设置对应 jar 包的作用范围: 编译环境、测试环境、运行环境
依赖范围 | 编译classpath | 测试classpath | 运行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
system | Y | Y | - | 存储中本地的jar |
impotr | 引入 DependencyManagement |