一、Maven
1. 理解
本意:专家 内行。是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理
构建:
指我们将一些源码、配置文件、图片视频音频等 作为"源材料","生成"出一个可以运行 可以访问的项目的过程。
构建的环节:
1. 清理:删除以前的编译,为重新编译做准备
2. 编译:将Java源码编译成字节码
3. 测试:针对性的测试,保证正确性
4. 报告:以标准的格式来记录测试结果
5. 打包:将项目压缩成可以部署的文件,如:Java项目 jar Web项目 war
6. 安装:将打好的包安装到Maven仓库中 以便于其他应用依赖使用
7. 部署:将打包后的文件 部署到远程仓库或者服务器中运行
2. Maven的作用
- 引入第三方jar:利用Maven引入jar的坐标,根据坐标自动引入jar和依赖jar
- 处理jar之间的依赖关系
- 处理jar之间的冲突
- 项目的分模块开发
- 实现分布式部署
3. Maven的使用
1. 下载 安装 https://maven.apache.org/download.cgi
2. 解压:目录不要过深、不要中文路径
3. 检查 JAVA_HOME 环境变量
4. 配置环境变量
① MAVEN_HOME 路径为Maven安装路径
② 在Path变量中引入 %MAVEN_HOME%\bin
5. 检查
在doc中 mvn -v
配置Maven本地仓库:
1. 在本地创建文件夹作为本地仓库(目录不要过深、不要中文路径)
2. 在Maven配置文件中指定本地仓库地址
<localRepository>D:\javaTools3\RepMaven</localRepository>
3. 在Maven配置文件中指远程仓库地址
<server>
<id>huaweicloud</id>
<username>anonymous</username>
<password>devcloud</password>
</server>
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
4. 配置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>
4. Idea整合Maven
5. 创建Maven项目
#####5.1 创建Java项目
5.2 创建web应用
在Java项目的基础上 安装JBLJavaToWeb 插件 转换一下即可
####6. Maven的核心概念
6.1 POM
Project Object Model:项目对象模型 ,将整个项目封装成对象便于操作和管理。Maven项目的核心配置文件
6.2 目录结构
约定 > 配置 > 编码。能使用配置文件解决问题 不编码,能约定的不使用配置文件
项目名
src
main
java
resources
test
java
pom.xml
6.3 坐标
定位资源的位置
groupId 公司域名倒写+项目名
artifactId 当前的模块名
version 版本号
如:
<groupId>com.ujiuye.maven</groupId>
<artifactId>mv_pro1</artifactId>
<version>1.0-SNAPSHOT</version>
6.4 仓库
① 本地仓库:为当前本机上的maven工程服务
② 远程仓库:本地没有 直接去远程仓库下载
1. 私服 当前的局域网下的一个范围的仓库
2. 中央仓库:架设在internet中的 为全世界的Maven工程服务的
3. 中央仓库镜像:架设在各大洲,减轻中央仓库的压力,更快响应用户的请求
7. Maven构建(生命周期)
lif:生命周期
clean:清理
validate:校验
compile:编译
test:测试
package:打包
verify
install:安装
site
deploy:部署
plugins:插件
8. 依赖管理
#####8.1 依赖的传递性
1. 间接传递
项目A 依赖 项目B 项目B依赖junit4.12,项目A也可以直接使用junit4.12
2. 直接传递
项目B直接在pom中引入junit4.12的依赖
8.2 依赖的传递范围
① compile 编译
1. main目录下的Java代码可以访问该范围的依赖
2. test目录下的Java代码可以访问该范围的依赖
3. 部署到服务器中,运行时放入到WEB-INF/lib目录下
② test
1. main目录下的Java代码不可以访问该范围的依赖
2. test目录下的Java代码可以访问该范围的依赖
3. 部署到服务器中,运行时不会放入到WEB-INF/lib目录下
如:junit
③ provided
1. main目录下的Java代码可以访问该范围的依赖
2. test目录下的Java代码可以访问该范围的依赖
3. 部署到服务器中,运行时不会放入到WEB-INF/lib目录下
其他:runtime import system等
8.3 依赖排除
依赖的原则:
路径最短者优先原则
先声明者优先原则
依赖排除:
<dependency>
<groupId>com.ujiuye.maven</groupId>
<artifactId>mv_pro1</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖排除-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
8.4 版本统一管理
1. 声明变量指定版本具体值
<properties>
<spring.version>4.1.1.RELEASE</spring.version>
</properties>
2. 使用直接使用变量名
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
9. 多模块开发
9.1 继承关系
父工程中管理依赖
<?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.ujiuye.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>Son1</module>
<module>Son2</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子工程中 继承父工程管理的依赖
<?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">
<parent>
<artifactId>Parent</artifactId>
<groupId>com.ujiuye.maven</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Son1</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
9.2 聚合
通过父工程将多个子工程模块 聚合在一起 统一使用统一管理
<modules>
<module>Son1</module>
<module>Son2</module>
</modules>
二、酷站
如果不知道坐标 可以在该网站搜索
https://mvnrepository.com/
https://search.maven.org/
如果有jar文件 但是没有坐标 此时可以将jar文件安装到本地仓库
mvn install:install-file -Dfile="jar地址" -DgroupId=组ID -DartifactId=项目名 -Dversion=版本号 -Dpackaging打包方式