maven黑马教程笔记
MAVEN全套教学-黑马
一、Maven介绍
1.1 maven是什么
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM( Proiect Obiect Model):项目对象模型
1.2 maven的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的、统一的项目结构
1.3 maven解压后的结构
1 | |-bin 启动项bat,sh文件 |
1.4 mvn安装
1 | 官网:http://maven.apache.org/ |
1.5 maven仓库地址
jar包下载地址:https://repo1.maven.org/maven2/
mav中央仓库pom文件引用地址:https://mvnrepository.com/
1.6 mvn坐标
坐标由三部分组成
- 组织ID groupId,项目隶属的组织名称(通常是域名的反写,例如:org.mybatis)
- 项目ID artifactId,当前maven项目名称(通常是模块名称,例如:CRM、SMS)
- 版本号 version
- 打包方式 packaging
1.7 mvn中POM文件修改,本地仓库配置
默认本地jar包存储位置,默认这一行是注释的:
${user.home}/.m2/repository
自定义修改:
D:/maven/repository
1.8maven参数修改仓库配置
1 | <mirrors> |
配置阿里云仓库:
1 | <repositories> |
在线查看阿里云可用jar包:https://developer.aliyun.com/mvn/view
配置使用腾讯云内网仓库地址
1 | <mirror> |
二、基础概念
三、第一个Maven项目(手工制作)
maven工程结构
1 | project |
Demo.java
1 | package com.itheima |
DemoTest.java
1 | package com.itheima; |
pom.xml
1 |
|
命令参数
1 | mvn compile #编译 |
命令1、mvn compile 编译
编译命令,用于把java生产.class文件。
命令2、mvn clean
清除命令,用于把 target 文件夹下面的文件都删除掉。
命令3、mvn test
测试命令,用于执行test目录下的测试,会生成一个测试报告,在 target/surefire-reportscom.itheima.DemoTest.txt
命令4、mvn package 打包
打包命令,生成.jar包,生成再target目录下。
命令5、mvn install 插入命令
把jar包上传到本地的mav仓库里面。
mav生成jar模板
1 | mvn archetype:generate -DgroupId={包路径com.itheima} -DartifactId={项目名称dmdzzh} -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false |
- 创建java项目
1 | mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false |
- 创建web工程
1 | mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false |
四、第一个Maven项目(IEDA制作)
生成web项目,并且引入tomcat插件
在bulid里面插入插件,然后右侧刷新,就可以看到tomcat,点击tomcat:run就可以
1 | <build> |
版本号:
1 | release完成版 |
五、依赖管理
项目运行所依赖的jar包。
依赖传递
- 直接依赖,在pom里面直接写上去的。
- 间接依赖,在pom里面依赖的jar包里面依赖的jar包。
依赖传递冲突
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
optional改为true,对外隐藏当前所依赖的资源,被引用的时候,引用方无法知道被引用里面的该jar包。
1 | <dependency> |
排除依赖
从引用的jar资源里面剔除指定jar,如下引用junit包,但是从里面排除hamcrest-core包
1 | <dependency> |
依赖范围scope
- 依赖的jar默认情况可以在任何地方使用,可以通过scope标签限定其作用范围。
- 可选作用范围
- 主程序有效(main文件夹范围)
- 测试程序有效(test文件夹范文)
- 是否参与打包(package指令范围内)
scope | 主程序 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j,主程序要用,测试代码里面也用,上线之后也需要 |
test | Y | junit,只需要在test类里面使用,而且不需要达到包里面 | ||
provided | Y | Y | servlet-api,本地需要,测试需要,但是服务上不需要,服务器里面有 | |
runtime | Y | jdbc |
1 | <dependency> |
六、生命周期与插件
完整的什么周期,分为三套:
- clena:清理
- default:核心工作
- site:产生报告,发布站点
清理阶段
- pre-clean 执行一些需要在clean之前完成的工作
- clean 实际的清理工作
- post-clean 执行一些clean之后的工作
核心阶段
生成报告阶段
插件plugins
phase:阶段
测试插件:
1 | <build> |
七、分模块开发与设计(mave高级重点)
- ssm_pojo 模块
- ssm_dao 模块
- ssm_service 模块
- ssm_controller 模块
八、聚合(重点)
上面的四个模块依次依赖,现在创建一个模块,里面管理所有模块。
步骤:
- 创建一个聚合模块项目,不需要src目录,只需要pom.xml文件
- 在pom.xml文件中增加一行:
<packaging>pom</packaging>
该行定义pom文件只用于构建管理。- packaging标签默认打jar包,web默认打war包,聚合需要手动改为pom。
- 当增加packagin为pom的时候,该模块在idea里面会被标记为root。
- 添加内容
<modules></modules>
用于管理模块。module顺序无所谓,mavne根据模块依赖进行加载。
1 |
|
- 打包部署的时候在ssm模块进行,单元测试开发可以在自己单独的模块里面启动测试。
- 实际上分模块之间还是依次依赖。
九、继承(重点)
用于解决:子模块中依赖的相同的jar包版本冲突。
使用方法:在pom.xml中添加
十、属性(重点)
定义一个变量,可以在pom文件中使用。
- 自定义属性:定义properties标签用于定义参数。
- 系统内置属性:直接引用页面已经创建好的参数,例如version变量。
- 可以读取setting.xml中的属性
{steeings.localRepository}
- 读取java系统属性。mvn help:system 查看所有属性
- 可以读取setting.xml中的属性
1 | <modelVersion>4.0.0</modelVersion> |
十一、版本管理
默认1.0-SNAPSHOT
SNAPSHOT 快照版本
RELEASE 发布版本
十二、资源配置
在pom文件中管理数据库密码等配置文件信息。
十三、多环境开发配置
生成、开发、测试环境配置文件分离。
- 定义环境
1. - 使用环境
十四、跳过测试
以下情况需要跳过测试,在maven中跳过test这个什么周期。
- 整体模块未开发完成
- 模块中某个功能未开发完成
- 快速打包
跳过测试的三种方法:
在idea里面点击跳过测试按钮。
命令行里面跳过测试
1
2mav 命令行里面添加 -D skipTests
例如:mvn install -D skipTests在插件里面跳过test
在maven里面test使用的插件时:
org.apache.maven.plugins.maven-surefire-plugin
,-配置插件的参数既可跳过测试。1
2
3
4
5
6
7
8
9
10
11
12
13
14<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>指定测试内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
<includes>
<!-- 包含指定测试-->
<include>**/UserTest.java</include>
</includes>
<excludes>
<!-- 排除用-->
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
十四、私服
多模块分开分开,不同人将开发好的jar资源放到私服里面,进行合作开发,使用nexus私服。
本次搭建的服务是nexus3:
官方文档地址:https://help.sonatype.com/repomanager3/product-information/download
官方网站:https://help.sonatype.com/docs
Linux搭建方式:
win搭建方式:
直接下载解压,然后在命令行里面执行
1 | D:\nexus-3.38.0-01\bin> .\nexus.exe /run nexus |
默认端口:8081
端口配置文件地址:etc/nexus-default.properties
程序java虚拟机配置地址:bin/nexus.vmoptions
win默认账号密码:账号admin
1.在页面手工上传资源
仓库组:设计概念,把多个仓库组合在一起方便使用
中央仓库备份(代理仓库):
宿主仓库(私有仓库):公司内部代码程序
Browse/maven-central 代理仓库,中央仓库
Browse/maven-snapshots 宿主仓库,nexus内部自带的仓库
Browse/maven-public 自带的仓库组
操作一,创建一个项目仓库,例如xcdn-release
设置/Repository/Repositories/Create repository/{选择类型为maven2(hosted)}
操作二,把xcdn-release添加到maven-public里面
设置/Repository/Repositories/maven-public/{选择添加xcdn仓库即可}
操作三,在页面手动上传jar包
主页/Upload/xcdn/{选择文件,添加相关坐标信息}
2.在IDEA里面配置私服
idea里面配置的是本地仓库,所以代码上传到私服是由本地的仓库进行操作,还需要告诉jar包上传的位置,哪个仓库哪个位置。
用户名密码配置到本地仓库里面,上传的位置配置到项目地址里面,下载的地址配置到本地。
- 在本地仓库配置账号密码
配置本地maven的settings.xml
1 | <servers> |
通过install命令把本地打好的jar包发布到私服上。
发布有一个专门的生命周期,Lifecycle-deploy。
如下内容中id里面对应参数为本地maven中配置的servers/server/id标签内容匹配,然后根据在本地maven配置文件中的账号密码实现jiar包上传。
1 | <bulid> |
3.使用docker安装nexus3
docker官网:https://hub.docker.com/
docker-nexus3官网:https://hub.docker.com/r/sonatype/nexus3/
安装步骤
- 拉取镜像
- 创建目录卷
- 创建容器
- 查看服务器里面的密码
1 | docker pull sonatype/nexus3 |