彼方尚有荣光在|

_xiaolin

园龄:2年9个月粉丝:3关注:5

Maven

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

本文作者:_xiaolin

本文链接:https://www.cnblogs.com/SilverStar/p/17415626.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _xiaolin  阅读(0)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起