Maven

106 阅读14分钟

Maven

一、小白入门

第一章、Maven概述

1、为什么要学习Maven?

1、Maven作为依赖管理工具
  1. jar包的规模

    随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多,项目中,一个模块里面要用到上百个jar包是非常正常的。
    
  2. 比如下面这个例子,我们只用到SpringBoot、SpringCloud框架中的三个功能:

    • Nacos服务器注册发现
    • Web框架环境
    • 图模块技术Thyme leaf

    最终导入了106个jar包

    而如果使用Maven来引用这些jar包只需要配置三个【依赖】。

  3. jar包的来源

    图片转存失败,建议将图片保存下来直接上传

  4. jar之间的依赖关系

    图片转存失败,建议将图片保存下来直接上传

2、Maven作为构建管理工具
  1. 你没有注意过的构建

    你可以不使用Maven,但是构建必须要做,当我们使用idea进行开发时,构建是idea替我们做的。
    

    图片转存失败,建议将图片保存下来直接上传

  2. 脱离IDE环境仍需构建

    图片转存失败,建议将图片保存下来直接上传

3、结论
  1. 管理规模庞大的jar白,需要专门的工具
  2. 脱离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包的依赖

图片转存失败,建议将图片保存下来直接上传

网址:mvnrepository.com/

<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技术体系全面覆盖

图片转存失败,建议将图片保存下来直接上传