[Maven]Maven 从小白到专家
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Maven]Maven 从小白到专家相关的知识,希望对你有一定的参考价值。
Maven
一、小白入门
1. 自动部署流程图
2. maven 构建过程
Maven
是Apache
软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具,maven 本身使用 Java 语言进行开发。构建过程包含的主要环节:
- 清理:删除上一次构建的结果,为下一次构建做好准备
- 编译:Java 源代码编译成
.class
字节码文件- 测试:运行提前准备好的测试程序
- 报告:针对刚才的测试结果生成一个全面的报告信息
- 打包:
java
工程 ->jar
包;web
工程 ->war
包- 安装:把一个 maven 工程经过打包操作生成的 jar 包或 war 包存入 maven 仓库
- 部署:将打包生成的 jar 包或 war 包部署到服务器
7.1 部署 jar 包:把一个 jar 包部署到Nexus
私服服务器上
7.2 部署 war 包:借助相关 maven 插件,如cargo
将 war 包部署到 tomcat 服务器上运行
3. maven 总体工作机制
4. maven 安装初始化配置
- 在 maven 安装目录的
conf/.setting.xml
中配置本地 maven 仓库
<!-- 配置本地 maven 仓库-->
<localRepository>D:/Software/Maven/repository</localRepository>
- 配置阿里云镜像仓库,提高下载速度
<mirrors>
<!-- 配置阿里云镜像仓库 -->
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
- 配置 maven 仓库使用的 JDK 版本
<!-- 配置 maven 仓库使用的 JDK 版本 -->
<profile>
<id>jdk-1.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>
</properties>
</profile>
- 配置环境变量
MAVEN_HOME
和PATH
5. maven 坐标说明
使用由
groupId
、artifactId
、version
标签构成的坐标可以唯一确定一个 maven 依赖
groupId
:公司或组织的 id(公司或组织域名的倒序,通常也会加上项目名称)artifactId
:一个项目或是项目中的一个模块的 id(模块的名称,将来作为 maven 工程的工程名)version
:版本号(SNAPSHOT
或RELEASE
)
6. archetype 命令创建 maven 工程
mvn archetype:generate
:mvn 是主命令,后两个命令是子命令,archetype 表示使用的插件,generate 表示使用插件的目的
7. pom.xml 解读
POM(
Project Object Model
):项目对象模型,将整个工程抽象为一个模型
<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">
<!-- 从 maven2 开始固定值 4.0.0,代表当前 pom.xml 所采用的标签结构 -->
<modelVersion>4.0.0</modelVersion>
<groupId>com.bear.maven</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前 maven 工程打包的方式,若取值为 pom,则说明这个工程是用来管理其它工程的工程 -->
<packaging>jar</packaging>
<name>test</name>
<url>http://maven.apache.org</url>
<!-- 自定义属性值 -->
<properties>
<!-- 构建过程中读取源码时采用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 配置当前依赖的作用范围 -->
<scope>test</scope>
</dependency>
</dependencies>
</project>
8. 常用构建命令
运行 maven 中和构建操作相关的命令时,必须进入到
pom.xml
文件所在的目录,否则会报错
- 主程序编译:
mvn compile
->target/classes
- 测试程序编译:
mvn test-compile
->target/test-classes
- 测试命令:
mvn test
- 打包命令:
mvn package
- 安装命令:
mvn install
,安装的效果是将本地构建过程中生成的 jar 包存入本地 maven 仓库,这个 jar 包在 maven 仓库中的路径是根据它的坐标信息生成的- install 过程中跳过测试:
mvn install -Dmaven.test.skip=true
9. 生成 web 工程
生成 web 工程:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
10. 查看工程中的依赖
- 查看当前工程依赖的 jar 包列表:
mvn dependency:list
- 以树形方式显示当前工程依赖列表:
mvn dependency:tree
11. scope 设置依赖作用范围
scope
指定依赖的作用范围:compile、test、provided、system、runtime、import
scope | main 目录(空间) | test 目录(空间) | 开发过程(时间) | 部署到服务器(时间) |
---|---|---|---|---|
compile | 有效 | 有效 | 有效 | 有效 |
provided | 有效 | 有效 | 有效 | 无效 |
test | 无效 | 有效 | 有效 | 无效 |
12. 依赖传递性
在 A 依赖 B,B 依赖 C 的前提下(
A->B->C
),C 是否能够传递到 A,取决于 B 依赖 C 时所使用的依赖范围
- 若 B 依赖 C 时使用
compile
范围,则 C 能够传递到 A- 若 B 依赖 C 时使用
test
或provided
范围:不能传递,需要这样的 jar 包时,必须在需要的地方明确配置依赖
13. 排除依赖以解决冲突
当 A 依赖 B,B 依赖 C 并且 C 可以传递到 A 时,A 不想依赖 C 以避免产生 jar 包冲突,需要在 A 中把 C 排除掉。配置方式:在具体依赖的
dependecy
标签中使用exclusions
标签排除具体依赖
<!-- 如工程依赖 springframework core 时需要排除 commons-logging 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.14</version>
<!-- 使用 excludes 标签配置依赖的排除 -->
<exclusions>
<!-- 在 exclude 标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写 version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
14. maven 父子工程
- maven 工程之间 A 工程继承自 B 工程,本质上就是 A 工程的 pom.xml 中配置继承了 B 工程中的 pom.xml。使用继承工程的好处是:可以在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本
- 只有打包方式为
pom
的 maven 工程才能够管理其它 maven 工程,打包方式为 pom 的 maven 工程中不写具体业务代码,专门用于管理其它 maven 工程- 在父工程中统一管理修改版本信息,以实现父工程一次修改,所有子工程版本依赖信息跟着变化
<!-- 使用 dependencyManagement 标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到子工程,子工程中使用到具体依赖时需要明确配置,不需要写版本号 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
二、普通开发人员(前置知识:SSM)
-
功能演示
-
架构的概念
-
正式创建工程
-
如何选择依赖
-
组件依赖列表
-
建包
-
物理建模
-
逻辑建模
-
数据库连接信息
-
JdbcUtils 创建数据源对象
-
JdbcUtils 事务代码分析
-
JdbcUtils 对象跨方法传递分析
-
JdbcUtils ThreadLocal 介绍
-
JdbcUtils 工具方法实现
-
JdbcUtils 测试
-
BaseDao 泛型说明
-
BaseDao 具体方法
-
BaseDao 测试
-
子类 Dao
-
事务控制总体思路
-
事务过滤器
-
TransactionFilter 类
-
注册 TransactionFilter 类
-
事务控制注意事项
-
表述层 ViewBaseServlet 服务器端渲染
-
Thymeleaf 简要工作机制
-
逻辑视图的概念
-
创建 ViewBaseServlet 类
-
配置初始化参数
-
ModuleBaseServlet
-
辅助功能
-
显示首页流程图
-
显示首页代码实现
-
登录流程图
-
创建 AuthServlet 类
-
创建 EmpService 和登录失败异常
-
AuthServlet 登录逻辑
-
登录完成并测试
-
退出登录
-
显示奏折列表流程图
-
创建组件
-
显示奏折列表 java 代码
-
登录信息部分
-
初步显示信息
-
调整颜色
-
和登录成功对接
-
显示奏折详情流程图
-
调整超链接
-
显示奏折详情 java 代码
-
页面显示
-
奏折已读
-
调整表单样式
-
批复奏折
-
登录检查流程图
-
登录检查代码实现
-
打包部署
-
第一只锦囊小结
-
建立工程间关系
-
各工程配置 POM
-
逆向工程
-
配置并测试数据源
-
整合 Mybatis
-
事务控制
-
配置 web.xml
-
显示首页
-
辅助功能
-
登录功能
-
整理文档
三、资深开发人员(前置知识:微服务)
- 第三只锦囊的说明
- 各工程总体说明
- 创建工程、建立依赖关系
- 父工程管理依赖
- util 模块
- 创建实体类
- 对外暴露接口
- service 层
- controller 层
- 主启动类
- yml 配置文件
- 准备环境
- 显示首页
- 登录验证流程图
- 装配远程接口说明
- 装配远程接口分析
- 验证方法
- 登录验证完成并测试
- 部署运行
- 修改 mysql 连接信息
- 在总体聚合工程上执行 install
- 添加 SpringBoot 的打包插件
- 执行 SpringBoot 打包插件的打包命令
- 微服务启动
- Maven 是一款项目管理工具
- POM 的四层体系
- 属性的声明和引用
- build 标签本身详解
- build 标签典型引用:JDK 版本
- Spring Boot 插件和 MBG 插件
- 依赖补充:其它三个依赖范围
- 可选依赖
- 版本仲裁机制
- 自定义插件:创建插件
- 使用插件
- profile 概述
- 配置方式
- 激活方式
- 实例演示
- 资源属性过滤
- Nexus 服务器安装和启动
- 仓库类型介绍
- 通过 Nexus 下载第三方 jar 包
- 部署 jar 包及获取别人部署的 jar 包
- 配置 Nexus 仓库举例
- jar 包冲突概述
- jar 包冲突本质
- 解决办法概述
- 解决办法:IDEA 的 Maven helper 插件
- 解决办法:Maven 的 enforcer 插件
- 体系外 jar 包导入
- 导出课件
以上是关于[Maven]Maven 从小白到专家的主要内容,如果未能解决你的问题,请参考以下文章