Maven
Maven
一、小白入门
第一章、Maven概述
1、为什么要学习Maven?
1、Maven作为依赖管理工具
-
jar包的规模
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多,项目中,一个模块里面要用到上百个jar包是非常正常的。
-
比如下面这个例子,我们只用到SpringBoot、SpringCloud框架中的三个功能:
- Nacos服务器注册发现
- Web框架环境
- 图模块技术Thyme leaf
最终导入了106个jar包
而如果使用Maven来引用这些jar包只需要配置三个【依赖】。
-
jar包的来源
-
jar之间的依赖关系
2、Maven作为构建管理工具
-
你没有注意过的构建
你可以不使用Maven,但是构建必须要做,当我们使用idea进行开发时,构建是idea替我们做的。
-
脱离IDE环境仍需构建
3、结论
- 管理规模庞大的jar白,需要专门的工具
- 脱离ide环境执行构建操作,需要专门的工具
2、什么是Maven?
Maven是Apache软件基金会组织维护的一款专门为java项目提供构建和依赖管理支持的工具。
1、构建
2、依赖
3、Maven的工作机制
第二章、Maven核心程序解压和配置
1、Maven核心程序解压和配置
1、Maven官网下载及解压
Maven官网:maven.apache.org/
windows:下载bin.zip/src.zip
linux:下载tar.gz
重点关注conf/settings.xml
bin/mvn.cmd 是mvn可执行文件
2、指定本地仓库
3、配置阿里云提供的镜像仓库
<!--阿里云镜像1-->
<mirror>
<id>aliyunId</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<!--阿里云镜像2-->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<!--阿里云镜像3-->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!--阿里云镜像4-->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://central.maven.org/maven2</url>
</mirror>
<!--maven官方镜像-->
<mirror>
<id>mirrorId</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name</name>
<url>https://repol.maven.org/maven2/</url>
</mirror>
4、配置Maven工程的基础JDK版本
<profiles>
<profile>
<id>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>
</profiles>
2、配置环境变量
1、检查JAVA_HOME配置是否正确
2、配置MAVEN_HOME
3、配置PATH
将MAVEN_HOME引用到path
4、验证
第三章、使用Maven:命令行环境
1、根据坐标创建Maven工程
1、Maven核心概念:坐标
2、实验操作
⑤解读生成的pom.xml
<!-- project 标签:根标签,表示对当前工程进行配置、管理-->
<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 标签:从maven2 开始就固定是4.0.0。 -->
<!-- 代表当前pom.xml所采用的标签结构-->
<modelVersion>4.0.0</modelVersion>
<!-- 坐标信息 -->
<!-- groupId 标签,坐标向量之一:代表公司或组织开发的某一个项目 -->
<groupId>com.lxg.maven</groupId>
<!-- artifactId 标签,坐标向量之一:代表项目下的某一个模块 -->
<artifactId>maven-01-java</artifactId>
<!-- version 标签:坐标向量之一:代表当前模块的版本 -->
<version>1.0-SNAPSHOT</version>
<!-- packaging 标签:打包方式 -->
<!-- 取值jar:生成jar包,说明这个一个java工程-->
<!-- 取值jar:生成war包,说明这个一个web工程-->
<!-- 取值pom:说明这个工程是用来管理其他工程的工程 -->
<packaging>jar</packaging>
<name>maven-01-java</name>
<url>http://maven.apache.org</url>
<!-- 在Maven中定义属性值 -->
<properties>
<!-- properties 标签:在构建过程中读取源码时使用的字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- dependencies 标签:配置具体依赖信息,可以包含多个dependency子标签 -->
<dependencies>
<!-- dependency 标签:配置一个具体的依赖信息 -->
<dependency>
<!-- 依赖坐标信息 -->
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<!-- scope标签:配置当前依赖的范围-->
<scope>test</scope>
</dependency>
</dependencies>
</project>
3、Maven核心概念:POM
4、Maven核心概念:约定的目录结构
2、在Maven工程中编写代码
1、主体程序
package com.lxg.maven;
public class Calculator {
public int sum(int i,int j){
return i + j;
}
}
2、测试主程序
测试类:
package com.lxg.maven;
import org.junit.Test;
import com.lxg.maven.Calculator;
// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;
public class CalculatorTest{
@Test
public void testSum(){
// 1.创建Calculator对象
Calculator calculator = new Calculator();
// 2.调用Calculator对象的方法,获取到程序运行实际的结果
int actualResult = calculator.sum(5, 3);
// 3.声明一个变量,表示程序运行期待的结果
int expectedResult = 8;
// 4.使用断言来判断实际结果和期待结果是否一致
// 如果一致:测试通过,不会抛出异常
// 如果不一致:抛出异常,测试失败
assertEquals(expectedResult, actualResult);
}
}
3、执行Maven的构建命令
1、要求
2、清理工作
mvn clean
效果:删除target目录
3、编译操作
4、测试操作
mvn test
测试的报告存放的目录:target/surefile-reports
5、打包操作
mvn package
打包的结果---jar包,存放的目录:target
6、安装操作
4、创建Maven版的Web工程
1、说明
2、操作
3、生成的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>com.lxg.maven</groupId>
<artifactId>maven-02-web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>maven-02-web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4、生成的Web工程的目录结构
5、创建Servlet
③在包下创建Servlet类
package com.lxg.maven;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class HelloServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.getWriter().write("hello maven web");
}
}
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.lxg.maven.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
6、在index.jsp页面编写超链接
<html>
<body>
<h2>Hello World!</h2>
<a href="helloServlet">Access Servlet</a>
</body>
</html>
7、编译
8、配置对servlet-api.jar包的依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
9、将Web工程打包为war包
10、将war包部署到Tomcat上运行
将war包的解压包复制到tomcat的webapps目录下,然后启动tomcat服务器即可在浏览器访问
5、让Web工程依赖Java工程
1、观念
2、操作
在web工程的pom.xml文件中,找到dependencies标签,在标签中做如下配置
<dependency>
<groupId>com.lxg.maven</groupId>
<artifactId>maven-01-java</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3、在web工程中,编写测试代码
4、执行Maven命令
6、测试依赖范围
1、依赖范围
部署到服务器是否有效取决于 会不会参与打包。
provided:已提供,说明服务器已经提供了,打包的时候就不要参与进去。
若是服务器已有的你还参与打包了就会发生冲突,常见会抛空指针异常或找不到类异常。
7、测试依赖的传递性
1、依赖的传递性
2、使用compile范围依赖spring-core
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
8、测试依赖的排除
1、概念
2、配置方式
<dependency>
<groupId>com.lxg.maven</groupId>
<artifactId>maven-01-java</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
3、测试
9、继承
1、概念
2、作用
3、举例
4、操作
<modules>
<module>maven-04-module</module>
<module>maven-05-module</module>
<module>maven-06-module</module>
</modules>
<!-- 在父工程中统一管理依赖信息 -->
<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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 自定义标签,维护Spring版本数据 -->
<atguigu.spring.version>4.3.6.RELEASE</atguigu.spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
5、实际意义
10、聚合
1、聚合本身的含义
2、Maven中的聚合
3、好处
4、聚合的配置
5、依赖循环问题
第四章、使用Maven:IDEA环境
1、创建父工程
1、创建Project
2、配置Maven信息
3、创建Java模块工程
测试:
IDEA执行mvn命令的三种方式:
1、
2、
跳过test
-D表示后面要附加的参数,字母D和后面的参数是紧挨着的,中间没有任何其他的字符
3、
4、创建Web模块工程
运行:
5、其他操作
1、工程导入
2、模块导入
第五章、其他核心概念
1、生命周期
①作用
②三个生命周期
③特点
2、插件和目标
3、仓库
二、掌握Maven环境开发全流程
三、Maven技术体系全面覆盖
本文作者:_xiaolin
本文链接:https://www.cnblogs.com/SilverStar/p/17415626.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。