Maven

Maven

思维导图:点击打开

1.Maven介绍

  1. apach组织提供的一个顶级项目
  2. maven是一个Jav开发工具
  3. 作用
    1. 管理项目构建生命周期
    2. 管理项目的jar包
    3. 管理项目基础信息
      1. 文档管理
      2. 测试报告

2.项目构建生命周期

1.清理:清理之前编译或测试生成的文件

2.编译:将java程序编译成class文件

3.测试:测试程序是否能满足预期功能

4.报告:将测试结果生成报告

5.打包:

  1. java工程:将工程中所有java类打成jar包
  2. web工程:将工程打包成war包

6.发布:将第5步生成的jar包或war包提交到本地仓库或远程仓库

3.maven如何在项目中管理jar包

在maven出现之前,jar包的管理是很麻烦的

  1. jar包定位较难:需要手动去网上下载,找到合适版本;

    1. 使用maven后,只需要在pom.xml文件中添加jar包的坐标,就可以自动下载相应的jar包。
  2. jar之间存在依赖:A.jar依赖B.jar,B.jar又依赖C.jar,想使用A.jar就需要将B.jar和C.jar先下载好。

    1. 使用maven后,会自动将A.jar依赖的所有jar包下载好
  3. jar包冲突:同一个项目中,有多个jar引用同一个jar

    1. 使用maven后,提供两个方案解决jar包冲突

      1. 短路径优先:

        A.jar---->B.jar---->C.jar
        D.jar---->C.jar
        

        D.jar先一步引用到C.ar,那么maven就只会使用D.jar

      2. 声明优先

        A.jar---->C.jar
        B.jar---->C.jar
        

        A.jar和B.jar引用C.jar的长度一致,但A.jar先一步声明,故maven只会使用A.jar

4.maven仓库

maven仓库存放着maven所管理的所有jar包。

分为本地仓库、私服仓库和中央仓库

  1. 本地仓库:maven在本地的jar包仓库。
    • 当在项目编译时,maven首先就从本地仓库寻找项目需要的jar包。
  2. 私服仓库:局域网中搭建的一个仓库,一般用于团队开发。
    • 当maven在本地仓库找不到需要的jar包时,就会从私服仓库找。
  3. 中央仓库:位于英国的中央仓库,全世界只有一个,为全世界程序员提供jar包
    • 当maven在私服仓库也找不到jar包时,就会从中央仓库找。
    • 因为中央仓库位于外网,所以下载缓慢,因此在国内搭建了相应的镜像仓库,为国内程序员提供jar包。

5.maven项目信息管理

maven可生成api文档和测试报告,处理这些的工作一般是测试人员做的。

6.maven的安装

1.去官网下载maven,一般maven3.3.9比较适合jdk1.8

链接:https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/

2.解压缩到非中文目录

3.配置环境变量

我的电脑---->右键---->属性---->高级系统设置---->环境变量---->下面新建【M2_HOME】

填入maven文件的解压缩位置,点击确定。

双击下面的path环境变量,新建【%M2_HOME%】

4.测试

windows+R---->cmd

输入mvn -v

出现如下画面即代表成功。

7.更换本地仓库位置

当发送任意maven命令【mvn clean】时,会导致maven在本机生成一个本地仓库

默认位置:

C:\Users\本机用户名\.m2\repository

修改本地仓库位置

在maven安装目录的conf目录下,备份setting.xml文件

打开setting.xml文件,添加< localRepository>标签,写上需要修改的路径,即可。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
-->
<!-- 更换本地仓库目录 -->
<localRepository>D:/Source/Maven/maven_repository</localRepository>

8.maven项目结构

使用maven管理项目必须遵守maven项目的结构规范来创建项目。

9.创建一个maven项目

1.新建一个文件夹HelloProject

2.按maven项目结构创建相应文件夹

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、artifactId和version -->
<!-- artifactId和version决定项目生成jar包的名称。如【ch01-maven-1.0-SNAPSHOT.jar】 -->
  <!-- 组织名,通常是公司或组织域名倒序+项目名  -->
  <groupId>com.tsccg</groupId>
  <!-- 当前项目模块名,通常是工程名 -->
  <artifactId>ch01-maven</artifactId>
  <!-- 当前项目版本号 -->
  <version>1.0-SNAPSHOT</version>
    
  <!-- 单元测试依赖 -->
  <dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.13.2</version>
		<scope>test</scope>
	</dependency>
</dependencies>
</project>

4.在main目录下新建/com/tsccg/HelloMaven.java

编写项目代码:

package com.tsccg;
public class HelloMaven {
	public static int add(int a,int b) {
		return a + b;
	}
	public static void main(String[] args) {
		System.out.println("10 + 20 = " + add(10,20));
	}
}

5.在test目录下新建/com/tsccg/TestHelloMaven.java

编写测试代码:

package com.tsccg;

import org.junit.Assert;
import org.junit.Test;

public class TestHelloMaven {
    @Test
    public void testAdd() {
        System.out.println("------01执行HelloMaven类的add方法------");
        HelloMaven hm = new HelloMaven();
        int result = hm.add(10,20);
        Assert.assertEquals(30,result);
    }
    // @Test
    // public void testAdd2() {
        // System.out.println("------02执行HelloMaven类的add方法------");
        // HelloMaven hm = new HelloMaven();
        // int result = hm.add(10,20);
        // Assert.assertEquals(50,result);
    // }
}

6.执行项目

在pom.xml文件所在目录,打开dos窗口,执行mvn test。

若最终显示BUILD SUCCESS,则说明执行成功。

10.maven常用命令(项目构建周期)

  1. mvn clean:清除命令
    • 删除当前工程中的target文件夹
  2. mvn compile:编译项目文件命令
    1. 将main文件夹下的resources中所有文件都拷贝到target文件夹里
    2. 编译当前工程的main文件夹里的所有java文件,将生成的.class文件放入当前工程的target文件夹里。
  3. mvn test-compile:编译测试文件命令
    1. 执行mvn compile
    2. 将test文件夹下的resources中所有文件都拷贝到target文件夹里
    3. 编译当前工程的test文件夹里的所有java文件,将生成的.class文件放入当前工程的target文件夹里。
  4. mvn test:执行测试,生成测试报告
    1. 执行mvn test-compile
    2. 运行生成的.class文件,执行测试类中所有的测试方法,生成测试报告,将测试报告放进target文件夹里。
  5. mvn package:打包
    1. 执行mvn test
    2. 如果测试没有问题,将main下所有java文件生成的所有class文件打包成jar或war,放入target文件夹里
  6. mvn install:安装
    1. 执行mvn package
    2. 把生成的jar/war包放入本地仓库

11.maven坐标(gav)

为了方便maven对jar的定位,在maven世界中,每一个jar都要有一个独一无二的坐标。

这个坐标由三部分组成:groupId、artifactId、version

<groupId>com.tsccg</groupId>
<artifactId>ch01-maven</artifactId>
<version>1.0-SNAPSHOT</version>

其中:

  1. groupId对应的是公司/组织名,通常是公司/组织域名倒写
  2. artifactId对应的是当前项目名,可以自定义
  3. version对应的是当前项目的版本号,同样可以自定义,但不能乱写

artifactId和version一起组成了项目打包后的包名。如:【ch01-maven-1.0-SNAPSHOT.jar】

12.在IDEA中设置Maven

12.1设置当前项目

左上角FIle---->settings---->Build,Execution,Deployment---->Build Tools---->Maven

改成自己使用的路径即可

12.2加速项目构建

选择Maven---->Runner

VM Options:

-DarchetypeCatalog=internal

Maven项目构建时,会自动下载模板文件,比较慢。这样设置可以指定使用内部模板,可以加快maven项目构建速度。

JRE:选择1.8

12.3设置之后新建的项目

左上角File---->New Projects Settings---->Settings for New Projects

按上面的步骤重复设置一遍即可。

13.在IDEA中创建Maven项目

13.1创建parent Module

创建一个maven项目Test-Project,不需要勾选Create from archetye(从模板创建)

输入项目名后输入项目的坐标,然后将自动生成的src目录删除。

13.2创建普通maven-java项目

1.左上角File---->new---->Module

选择Maven,然后勾选Create from archetye(从模板创建),选择图中的以quickstart结尾的模板,next。

2.填写module名、项目坐标,next

3.idea自动配置的项目信息,一般不用管,直接next

4.项目创建成功

5.创建缺少的resources文件

6.在自动生成的pom.xml文件中只保留下面语句即可,其他可以删掉

7.进行单元测试

1.寻找合适的单元测试jar包:

打开maven官方仓库:https://mvnrepository.com/

搜索junit,找到使用量最多的版本,复制对应坐标(点击即可复制)

2.将依赖添加到pom.xml文件中的dependencies标签内

3.如果idea没有自动下载对应jar包,手动点击右上角更新按钮

maven会自动将对应jar包下载到本地仓库,下次使用就不需要重新下载了。

4.编写项目主程序

在main目录下自动创建的App类里编写jdbc查询方法,所需数据库驱动按上面的方法在pom文件里添加。

package com.tsccg;

import java.sql.*;

/**
 * @author TSCCG
 * 主程序
 */
public class App {
    public static void main(String[] args) {
        App app = new App();
        boolean result = app.search();
        System.out.println(result ? "查询成功":"查询失败");
    }
    public boolean search() {
        boolean result = false;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tsccg?serverTimezone=UTC ",
                    "root","123456");
            String sql = "select count(*) from t_vip";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            if (rs.next()) {
                result = true;
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(ps != null) {
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
        return result;
    }
}

5.编写测试类

在test/java目录下创建com.tsccg.TestAdd

package com.tsccg;

import org.junit.Test;

import static org.junit.Assert.assertTrue;

/**
 * 测试App类
 * 测试类命名规范:test+所测类/方法名
 */
public class TestApp {
    //测试App里的add方法
    @Test
    public void testAdd() {
        App app = new App();
        boolean result = false;
        result = app.search();
//        Assert.assertEquals(true,result);//期待值,实际值
        assertTrue(result);//默认期待值为true
    }

}

6.开始单元测试

13.3创建maven-web项目

1.选择webapp模板

同样的步骤,只不过创建时,选择以webapp结尾的模板

2.补全缺少的文件

项目建好后,如下图:

补全缺少的maven项目结构文件

3.添加servlet依赖

创建好的web项目无法直接创建Servlet接口实现类,需要添加servlet依赖

去官网搜索servlet,得到相应坐标,添加到pom.xml中,点击右上角更新按钮

之后就可以创建Servelt了。

4.创建Servlet

编写程序:

package com.tsccg;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @Author: TSCCG
 * @Date: 2021/09/05 18:01
 */
public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Integer age = 19;
        request.setAttribute("age",age);
        request.getRequestDispatcher("index.jsp").forward(request,response);
    }
}

6.创建展示页面

编写index.jsp

<%@ page isELIgnored="false"%><%--如果无法使用el表达式则添加--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用EL表达式实现关系运算输出--%>
EL表达式:${age>=18?"欢迎光临":"谢绝入内"}

5.添加开启服务器按钮

6.开启服务器

在浏览器输入:http://localhost:8080/MyWeb/one

posted @ 2021-09-05 18:48  TSCCG  阅读(49)  评论(0编辑  收藏  举报