maven笔记整理
Posted Leo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven笔记整理相关的知识,希望对你有一定的参考价值。
1. Maven介绍
1.1. 过去开发过程中的问题
- 项目中使用的jar包 , 需要先下载再导入和添加依赖
- jar包之间的依赖关系 , 程序员需要明确 , 否则报错 , 比如jar包A依赖于jar包B , 如果只导入jar包A程序将报错
- 项目工程都在一个大的工程中 , 所有代码都写在了一个工程中 , 这样功能做不到抽取 , 更做不到分模块开发
- 实际开发中 , 手动导入jar包 , 可能存在jar包之间的版本兼容问题 , 特别是依赖包
1.2. 什么是Maven
Maven是一个采用纯java编写的开源项目管理工具 , Maven采用了一种被称为Project Object Modle(POM)概念来管理项目 , 所有的项目配置信息被定义在一个POM.xml文件中 , 通过该文件Maven可以管理项目的整个生命周期 , 包括清除 编译 测试 报告 打包 部署等等 , 目前Apache下绝大多数项目都已经采用Maven进行管理 , Maven本身还支持多种插件 , 可以方便灵活的控制项目 , 开发人员的主要任务应该是关注商业逻辑并实现它 , 而不是把时间浪费在学习如何在不同的环境中依赖jar包 , 部署项目等 , Maven正是为了将开发人员从这些任务中解脱出来而诞生的
总结 : Maven是一个采用纯Java编写的开源项目管理工具 , 提供了聚合工程来管理项目 , 通过生命周期可以一键构建项目
1.3. Maven解决的问题
- 解决导包jar包问题 : 使用maven后 , 只需要关注需要功能的包即可 , 这个包依赖的其他包会自动导入
- 解决版本兼容问题 : 当导入一个功能包后 , 这个功能包依赖的其他包会自动导入 , 并且没有兼容问题
- 解决项目构建问题 : maven提供了聚合工程 , 可以把三层架构的代码抽取成多个工程
1.4. Maven的作用
- 依赖管理
- 一键构架
1.4.1. 依赖管理
依赖管理 : 分为依赖和管理
- 依赖 : 就是导入jar包 , 分为直接依赖和间接依赖
- 直接依赖 : 项目中真正倒入了坐标
- 间接依赖 : 项目中没有真正导入坐标 , 但是包依然导入了
- 管理 : 版本管理(聚合工程 , 版本管理交给父工程管理)
1.4.2. 一键构架
从项目开发到部署都是通过maven命令完成 , 依赖生命周期
1.5. Maven下载
在安装idea的时候自带maven , 使用的过程中可以使用自带的maven也可以使用外部的 , 一般情况下都会使用外部的maven
idea是2019版本推荐使用3.6.1 , idea是2020版本推荐使用3.6.3
下载下来直接解压即可 , 文件路径不能有中文和空格
1.6. Maven工程的包的介绍
- bin : 命令文件夹 , 可执行文件
- boot : 启动器(引导程序)
- conf : maven配置文件
- lib : maven需要的jar包
1.7. Maven的使用
maven的使用方式有2种 : 1. 控制台命令使用 2. idea集成
- 控制台命令使用 : 需要配置环境变量 , 将解压后文件的bean目录配置到环境变量中 , 并通过指令进行操作
- 新建环境变量 , 变量名
MAVEN_HOME
变量值maven文件夹地址
- 配置path环境变量 , 地址为
%MAVEN_HOME%\\bin
- 通过cmd命令行的
mvn
命令可以查看是否配置成功
- 新建环境变量 , 变量名
- idea集成 :
- idea -> file -> close project -> idea右下角configure -> setting, 搜索maven , 这种方式配置的是全局的maven , 如果在项目中配置setting只能配置单个项目的 , 切换项目后会失效
- 配置maven home directory , 选择maven的安装目录
- 配置User setting file选择使用哪一个配置文件 , 勾选override , 选择
maven解压目录\\conf\\setting.xml
- 配置Local repository, 选择一个自己创建的文件名为
repository
的文件夹即可 - 在电脑中找到并修改配置文件
setting.xml
2. maven的仓库介绍
2.1. maven中导入坐标的方式
导入坐标的方式 :
- 在
pom.xml
配置文件中引入一个坐标 - maven会根据坐标自动去仓库下载相关jar包
2.2. 仓库的分类
- 中央仓库
- 最核心 , 最大的 , jar包最全的 , 服务于全球的一个仓库 , 有专门的团队在维护
- 远程仓库
- 公司内部搭建远程仓库
- 云在线仓库
- 本地仓库
- 电脑中的某一个文件夹作为本地仓库 , 用来存放从中央仓库或者远程仓库拉取下来的jar
2.3. 本地仓库的创建配置
- 创建文件夹
- 在maven的配置文件中 , 指定这个文件夹为本地仓库
- 配置文件位于
maven解压目录\\config\\settings.xml
- 修改
localRepository
配置 , 如果不设置默认位于c盘下 - 将
localRepository
指定为自己设置的文件夹 , 例 :<localRepository>E:\\\\repository</localRepository>
2.4. maven查找jar包的过程
- 在工程中引入一个jar包
- maven会自动查找这个坐标对应的jar包
- 如果本地仓库有对应jar包 , 则直接拉取 , 并不继续执行
- 如果本地仓库没有对应jar包 , 此时看有没有配置远程仓库
- 如果配置了远程仓库 , 此时去远程仓库
- 如果远程仓库有 , 则直接拉取到本地仓库
- 如果远程仓库也没有 , 则去中央仓库找
- 如果没有配置远程仓库 , 此时去中央仓库找(速度慢)
- 如果配置了远程仓库 , 此时去远程仓库
2.5. 配置阿里镜像远程仓库
在配置和安装的过程中 , 经常会下载一些文件 , 如果本地仓库没有会去远程仓库找 , 如果没有没有配置远程仓库 , 则会去中央仓库找 , 中央仓库位于大洋彼岸 , 下载速度较慢 , 因此需要配置一个远程仓库
配置远程仓库方式 :
-
将下方配置文件复制粘贴至 , 配置文件
setting.xml
的<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工程的创建
3.1. 创建普通java工程
创建普通java工程步骤 :
- fiel -> new -> porject ->选择maven -> 不选择任何东西 , 点击next , 创建maven普通java工程
- 设置工程名称 , 组织名称 , 项目名称 , 版本号
- 设置name : 名称
- 设置GroupId : 组织名称 , 一般取值为包名 , 或是公司域名倒写(也是包名)
- 设置ArtifactId : 项目名称 , 默认与名称一致
- 设置Version : 版本号, 一般为1.0
- Finish完成创建
3.1.1. maven的普通java工程介绍
maven普通java工程解构 :
- 项目名称
- src
- main
- java : 写java代码的位置
- resource : 写配置文件的位置
- test : 写测试
- main
- pom.xml : 与src同级 ,
- src
pom.xml介绍 :
pom.xml是maven工程的功能性文件 , 可以用来配置 : 依赖包 , 插件 , 字符编码集 , 仓库 , 版本
<?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>
<!--
组织id , 项目名称 , 版本
这三个信息构成一个坐标 , 坐标是唯一值 , 只要三者有一个发生改变就变成另一个工程 , 只有完全一致时才是同一个工程
举例 : 版本2.0和版本1.0 是2个工程不是1个-->
<groupId>com.mavenTest.cn</groupId>
<artifactId>javaMavenTest01</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
3.2. 创建web工程
3.2.1. 通过骨架创建
通过骨架创建web工程步骤 :
- fiel -> new -> porject ->选择maven -> 勾选Create from achetype -> 选择maven-achetype-webapp
- 设置工程名称 , 组织名称 , 项目名称 , 版本号
- 设置name : 名称
- 设置GroupId : 组织名称 , 一般取值为包名 , 或是公司域名倒写(也是包名)
- 设置ArtifactId : 项目名称 , 默认与名称一致
- 设置Version : 版本号, 一般为1.0
- 确认配置文件和仓库位置 , 完成创建
- 第一次创建web工程会到远程仓库下载文件
这种方式缺陷 :
- 只有webapp文件夹 , 没有java和resources , 需要手动创建
- 默认jdk版本是1.7
- pom文件中生成一些无用东西
- web.xml的DTD约束变了 , 不影响使用
3.2.2. 创建普通工程 , 改造为web工程
将普通工程改造为web工程步骤 :
-
创建普通工程
-
file -> Project Structure -> facets
-
添加一个web模块 , 并选择给具体工程添加模块
-
修改web模块地址 , 改到
\\工程\\src\\main
下 , 模块名为webapp举例 :
...\\javaMavenTest\\src\\main\\webapp\\WEB-INF\\web.xml
-
修改访问目录 , 当访问
\\
时访问的目录 , web模块地址举例 :
...\\javaMavenTest\\src\\main\\webapp
-
动态生成war包
-
在pom.xml中指定打包方式
<packaging>war</packaging>
优缺点 :
- java和resources都有 , 需要手动改造目录
- 需要手动添加war包
- web.xml头部DTD没有改变
4. maven的JDK版本问题
maven创建的工程默认jdk版本是1.5 (通过file -> setting -> 搜素java compiler查看)
修改maven工程JDK版本的3种方式 :
-
局部修改 : 修改单一的maven工程 , 创建新的工程需要重新配置 , 了解即可
-
使用配置修改
在pom.xml中配置 , 通过properties修改jdk版本 , 修改完成后需要刷新配置文件否则无法生效
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
-
使用插件修改
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
-
-
全局修改
找到maven的安装路径 , 进入conf文件夹 , 找到setting.xml文件 , 将下面的配置粘贴进
<profiles>
标签内<profile> <id>jdk1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> <maven.compiler.encoding>utf-8</maven.compiler.encoding> </properties> </profile>
5. maven生命周期
一个项目的开发流程 :
编码 -> 编译 -> 测试 -> 运行 -> 打包 -> 部署maven的生命周期 :
每个生命周期对应的都是一个指令 , 这个指令可以在cmd中使用 , mvn-指令名称
idea集成了maven命令 , 每个maven工程右侧都有一个maven选项卡
选项卡中可以直接点击指令 , 进行操作需要掌握的指令 :
clean : 清理工作 , 主要清理target目录
comple : 编译工作 , 将java文件到达class文件
package : 打包 , 把项目达成jar或war , 需要使用packaging
命令指定打包样式
install : 把项目安装到本地项目 , 让别的项目引入本项目坐标 , 然后使用
- 编码 : 写代码 , java文件
- 编译 : 代码编写完成后 , 变成class文件
- maven指令 : comple
- 测试 : 上线前对功能进行测试
- maven指令 : test
- 运行 : 项目运行
- maven命令 : run
- 打包 : java项目打成jar , web项目打成war
- mavne命令 : package
- 通过pom.xml配置
<packaging>
标签的值选择将项目打成什么包 <packaging>
可选参数有jar(默认值 , 不写默认打成jar包)
war
pom
- 安装 : 将java包安装到本地仓库
- maven命令 : install
- 部署 : 上线到生产环境
- maven命令 : deploy
- 清理 : 清理已经编译好的class文件
- maven命令 : clean
- 生命周期在执行的过程中 , 位于下面的生命周期会自动执行上面的所有生命周期(clean除外 , clean不执行)
使用idea编写maven项目 , 可以使用自带的maven命令 , 点击右侧maven选项 , 选择项目 , 选择Lifecycle(生命周期) , 生命周期内的内容就是生命周期方法
6. maven工程的运行方式
maven
6.1. 使用maven-tomcat插件运行web工程
基本不实用这种方式 , 因为这种方式使用tomcat7 , tomcat7已经被淘汰 , 并且只有tomcat7的插件 , 没有更高版本
步骤 :
-
引入tomcat插件
<build> <plugins> <!--在pom文件中 添加comcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- 项目访问路径 本例:localhost:9090, 如果配置的aa,则访问路径为localhost:9090/aa --> <path>/</path> <port>9090</port> <uriEncoding>UTF-8</uriEncoding><!-- 非必需项 --> </configuration> </plugin> </plugins> </build>
-
使用插件运行
6.2. 使用maven-jetty插件运行web工程
jetty插件一直在更新 , 支持新版tomcat , 可以使用
步骤 :
-
引入jetty插件
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.3.0.M2</version> <configuration> <webAppConfig> <!--配置根路径--> <contextPath>/</contextPath> </webAppConfig> <httpConnector> <!--配置端口--> <port>10000</port> </httpConnector> </configuration> </plugin>
-
使用插件运行
6.3. 使用本地tomcat运行web工程
使用方法和普通web工程一样
- 添加web工程
- 配置tomcat
- 部署项目
以上是关于maven笔记整理的主要内容,如果未能解决你的问题,请参考以下文章