Maven框架的下载、基本配置以及入门案例

Maven框架

----- 图片有空再补
可以看为我知笔记的内容,图片完整:https://2e39dcd0.wiz03.com/wapp/pages/view/share/s/0KetPg1bRx7G29XSf327xnnk1rcm-G0MIAPx2ipgu_3KXCdd

第一章 Maven概述

擅长管理大型项目
自动管理你需要的jar包
自动进行下载我们需要的jar包。

1.maven的概念

​ Maven是项目进行模型抽象,充分运用面向对象的思想,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

说白了: Maven是由Apache开发的一个工具。用来管理java项目, 依赖管理(jar包的管理),项目构建.

2.Maven的作用

  • 依赖管理: maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。

  • 项目构建: maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。

  • maven对工程分模块构建,提高开发效率。

3.Maven的概念模型

1530969038737

4.Maven的仓库

4.1 Maven的仓库

仓库名称 作用
本地仓库 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
中央仓库 就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2/
远程仓库(私服) 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven须要下载构件的时候。它从私服请求,假设私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。

1530969111977

4.2 仓库中存放的内容

  • Maven自身运行所需要的插件
  • 第三方框架(spring/mybatis/springmvc)和工具类的jar包
  • 我们自己开发的maven项目安装后的jar包

5 maven的坐标

​ Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。在Maven中,不论什么一个依赖、插件或者项目构建的输出, 都能够称之为构件

​ 为了能自动化的解析任何一个Java构件. Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标

​ 包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。坐标的定义元素如下:

  • groupId:项目组织唯一的标识符,实际对应JAVA的包的结构
    • (一般写公司的组织名称 例如:com.itheima,com.alibaba)
  • artifactId: 项目的名称
  • version:定义项目的当前版本

例如:要引入druid的jar包,只需要在pom.xml配置文件中配置引入druid的坐标即可:

<!--druid连接池-->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>  
  <version>1.1.10</version>  
</dependency>

第二章 maven的安装(软件)

1 下载maven

1571635692104

2 安装maven

将maven压缩包解压, 复制到没有中文没有空格的目录下,即安装完毕

1571635743923

3 maven的目录介绍

目录名 作用
bin 可执行指令
boot 第三方类的加载框架
conf 配置文件目录
lib maven自身的类库

4 配置环境变量

1571636629488

MAVEN_HOME=D:1_install3_kaifaapache-maven-3.6.1
Path=%MAVEN_HOME%in;... ...

1571636683606

5 配置本地仓库

1、找到Maven解压目录confsettings.xml 
2、在setting.xml 文件中找到 localRepository 标签 
3、将 <localRepository>/path/to/local/repo</localRepository>从注释中取出 
4、将标签体内容修改为自定义的Maven仓库目录

2.5.1 将/资料/本地仓库/xxx.zip 解压

复制到 没有中文和空格 目录下

1571637131430

2.5.2 配置本地仓库

在maven的安装目录中 maven/conf/settings.xml 配置本地仓库:

1571637290924

<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>D:1_install3_kaifa
epository_maven</localRepository>

2.5.3 配置阿里云远程仓库 (扩展)

1571637387340

  <mirrors>
	<mirror>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<mirrorOf>central</mirrorOf>        
	 </mirror>
  </mirrors>

6 测试maven安装成功

打开cmd本地控制台, 输入

mvn -version

1571637596719

7 小结

  1. Maven工具安装包 和 本地仓库解压到一个没有中文没有空格目录下. 建议分两个文件夹

  2. 配置Maven的时候(必须MAVEN_HOME)

    1. MAVEN_HOME: 配置到Maven工具解压目录
    2. path: 配置到Maven工具解压之后里面的bin目录

第三章 IDEA整合本地Maven

1 配置maven环境

方式一:

1571795547739

方式二

1571637961086

1571785194218

2 问题: 解决创建工程缓慢

因为 联网 下载内容, 所以 导致创建工程缓慢

-DarchetypeCatalog=internal

1571651141645

第四章 idea创建maven工程(重点重点重点)

1 创建空的工程

1571638978518

1571639060631

1571639097047

1571639128629

2 创建跳过骨架的java项目

2.1 how

1571639192677

1571639234551

1571639808115

1571639845612

1571639911574

目录 作用
main/java 存放java代码
resources 存放配置文件的
test/java 存放测试java代码

1571639974745

2.2 创建java代码

1571640197272

package cn.itcast;

public class ProductDao {
    public void add() {
        System.out.println("1 添加商品 ... ...");
    }

    public void del() {
        System.out.println("2 删除商品 ... ...");
    }

    public void update() {
        System.out.println("3 修改商品 ... ...");
    }

    public void queryAll() {
        System.out.println("4 查询所有商品 ... ...");
    }
}

2.3 生成测试代码

正式上线前, 每个方法都必须经过测试, 目前我们能够想到的就是main方法.

因为一个类只有一个main方法, 一个类可能有上千个方法, 那得需要多少个方法, 所以 迫切需要更高效方法, junit测试登场了.

1571640260878

1571640299024

1571640360185

1537362379635

为什么junit报红? 因为缺少junit包, 导入缺少的junit包即可.

2.4 导入依赖

1571640422448

<?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>cn.itcast</groupId>
    <artifactId>day1801</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--导入junit包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

报红解决:

1571640449058

2.5 一个一个测试

完成测试代码:

package cn.itcast;

import org.junit.Test;

public class ProductDaoTest {

    private ProductDao productDao = new ProductDao();

    @Test
    public void add() {
        productDao.add();
    }

    @Test
    public void del() {
        productDao.del();
    }

    @Test
    public void update() {
        productDao.update();
    }

    @Test
    public void queryAll() {
        productDao.queryAll();
    }
}   

2.6 测试所有

一个一个测试,太累了, 给大家介绍一个简单的.

1571640789291

3 创建有骨架 java工程(了解)

3.1 how?

1571643211567

1571643255407

1571643318618

1571643469936

* 缺少 resources目录 补上

1571643618970

pom.xml中会产生很多多余的配置

1571643672589

总结: 因为创建有骨架的java工程会产生很多多余的配置, 所以实际开发中一般不用.

4 创建有骨架的web工程(了解)

4.1 how?

1571643983838

1571644003571

1571644017266

1571644028167

1571644081864

4.2 标准web工程目录结构

1537365617727

经过对比发现如下问题:

4.3 缺少java目录

1537365726887

1537365747597

1537365811337

更改java目录属性

1537365915916

1537365941638

4.4 缺少resources目录

1537365960822

1537365982221

1537365994589

1537366029843

4.5 缺少test目录

4.5.1 新建test目录

1537366119328

1537366137117

1537366151796

4.5.2 新建test.java目录

1537366176109

1537366192184

1537366210414

1537366237164

总结: 使用骨架创建的web项目 在开发时不常用!
	理由1: 在pom.xml增加不必要的配置
	理由2: 完整的web工程缺的东西太多!

5 创建跳过骨架的web工程(重点重点重点)

5.1 创建无骨架的java工程

1571644419657

1571644449059

1571644473424

1571644497436

修改打包方式

1571644641270

标准web项目的目录结构

1537365617727

5.2 问题: 缺少webapp 目录

1571644992692

5.3 问题: 缺少 web.xml

1571645289905

1571645306990

5.4 tomcat插件

5.4.1 在pom.xml中配置

因为 web项目最终跑在web服务器中, 所以需要配置 web服务器(tomcat只是其中一个)

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>cn.itcast.maven</groupId>
    <artifactId>web02</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--
        java工程: jar 含义是 java rar
        web工程: war 含义是 web rar
    -->
    <packaging>war</packaging>
    <!--配置插件-->
    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--配置端口号-->
                    <port>80</port>
                    <!--配置项目路径-->
                    <path>/day1804</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5.4.2 准备index.html

1571645670350

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是我的第一个maven版本的web项目!</h1>
</body>
</html>

5.4.3 启动tomcat

1571645721863

1571645760741

测试:

1571645800246

5.4.4 简化启动tomcat

1571646401841

1571646440164

1571646512205

1571646600055

4.6.3 创建servlet

1571646808325

1571646885072

1571646966414

4.6.3.1 解决servlet因为缺少servlet.jar包报错

在pom.xml增加servlet依赖

1571647275049

1571647302251

1571647352446

1571647411268

1571647528706

<?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>cn.itcast</groupId>
    <artifactId>day1804</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--修改web项目的打包方式-->
    <packaging>war</packaging>

    <dependencies>

        <!--引入servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <!--只在测试和编译时有效-->
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <!--配置插件-->
    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--配置端口号-->
                    <port>80</port>
                    <!--配置项目路径-->
                    <path>/day1804</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

经过观察,servlet不再报错

1571647734636

测试:

1571647714708

第五章 maven的常用指令

1571647994685

1 clean命令

1530977033459

1.1 方式一

1571648094960

1571648143525

发现 target目录 被 清除了

1571648180288

1.2 方式二

1571813451648

1571648740838

1571649010223

1571649184818

执行清屏命令:

1571649234950

经过观察发现target目录消失:

1571649285060

2 compile命令

1530977220710

1571649436088

3 test命令

测试命令: 执行 src/test/java 下junit的测试用例

  • 准备工作1: 业务类

    package cn.itcast.service;
    
    public class UserService {
    
        public void add() {
            System.out.println("=============1 UserService.add 天生傲娇 ... ...");
        }
    
        public void queryAll() {
            System.out.println("=============2 UserService.queryAll ... ...");
        }
    }
    
  • 准备工作2: 测试类

    package cn.itcast.service;
    
    import org.junit.Test;
    
    public class UserServiceTest {
    
        private UserService userService = new UserService();
        @Test
        public void add() {
            userService.add();
        }
    
        @Test
        public void queryAll() {
            userService.queryAll();
        }
    }
    
  • 测试:

    1571649973784

4 package命令

mvn package, 打包项目

4.1 对java项目打包

1571650068040

4.2 对web项目打包

1571650191556

5 install命令

mvn install, 打包后将其安装在本地仓库

1571650295273

安装完毕后,可以在本地仓库中找到 对应的项目

1571650412338

第六章 依赖管理

1 maven插件

1530978764025

1.1 jdk编译版本的插件

pom.xml

1571650607384

            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

1571650718594

1571650688355

1.2 tomcat7服务端的插件

  • 配置tomcat插件
<!-- 配置Tomcat插件 -->
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <!--配置端口号-->
        <port>80</port>
        <!--配置项目路径-->
        <path>/day1804</path>
    </configuration>
</plugin>
  • 运行tomcat插件

    • 方式一

      1571813786908

      1571651442564

    • 方式二

      1571651462914

  • tomcat 插件注意问题

    Maven的中央仓库中只有tomcat7.X版本

    如果想使用tomcat8.X版本,

    1. 需要从第三方仓库查找
      2. 或者使用idea集成外部的tomcat插件

2 导入依赖

2.1 导入junit依赖

  • 导入junit坐标
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

1530980380837

  • 进行单元测试
import org.junit.Test;

public class DemoTest {
    @Test
    public void demo1() {
        System.out.println("敢于亮剑,绝不后退!");
    }
}

1530980434008

2.2 导入servlet的依赖

  • 创建servlet, 但是发现报错,原因是没有导入servlet的坐标依赖

1530980596377

  • 导入servlet的坐标依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  • 原有的servlet报错恢复正常

1530980728536

3 依赖范围

1530980805944

1530980856407

第七章 maven案例: 完成用户列表显示功能

1 需求分析

1531021609684

2 准备工作

2.1 sql语句

create database day18_db;

use day18_db;

create table user(
	id int primary key auto_increment,
	name varchar(50),
	money int
);

insert into user(id, name, money) values(null, '张三', 1000);
insert into user(id, name, money) values(null, '李四', 1000);
insert into user(id, name, money) values(null, '王五', 1000);

2.2 创建项目(跳过骨架的java项目)

1571652093789

1571652122987

1571652156154

1571652239439

2.3 添加webapp目录 和 web.xml文件

1571652573617

1571652825828

1571652856355

2.4 导包(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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>cn.itcast</groupId>
    <artifactId>day1805</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <!--因为当前项目是web项目, 所以设置为 war-->
    <packaging>war</packaging>

    <!-- 1 导入依赖-->
    <dependencies>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.4</version>
        </dependency>

        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.2</version>
        </dependency>

    </dependencies>

    <!-- 2 配置插件-->
    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--配置端口号-->
                    <port>9000</port>
                    <!--配置项目路径-->
                    <path>/day1805</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3 实现

3.1 数据层

3.1.1 接口

1571656978762

package cn.itcast.mapper;

import cn.itcast.pojo.User;

import java.util.List;

public interface UserMapper {

    /*查询所有*/
    public List<User> queryAll();

}

3.1.2 配置文件

1571657003788

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.mapper.UserMapper">
    <!--查询所有用户-->
    <select id="queryAll" resultType="User">
        select * from tb_user
    </select>
</mapper>

3.2 业务层

1571657032008

3.2.1 接口

package cn.itcast.service;

import cn.itcast.pojo.User;

import java.util.List;

public interface UserService {
    /**
     * 查询所有
     */
    public List<User> queryAll();
}

3.2.2 实现类

package cn.itcast.service.impl;

import cn.itcast.base.BaseService;
import cn.itcast.mapper.UserMapper;
import cn.itcast.pojo.User;
import cn.itcast.service.UserService;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserServiceImpl extends BaseService implements UserService {
    @Override
    public List<User> queryAll() {
        SqlSession sqlSession = getSession();
        UserMapper userMapper = getDao(sqlSession, UserMapper.class);
        List<User> userList = null;
        try {
            userList = userMapper.queryAll();
            commitAndCloseSession(sqlSession);
        } catch (Exception e) {
            e.printStackTrace();
            rollbackAndCloseSession(sqlSession);
        }
        return userList;
    }
}

3.2.3 测试

1571657054504

package cn.itcast.service;

import cn.itcast.pojo.User;
import cn.itcast.service.impl.UserServiceImpl;
import org.junit.Test;

import java.util.List;

public class UserServiceTest {

    @Test
    public void queryAll() {
        UserService userService = new UserServiceImpl();
        List<User> userList = userService.queryAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

3.3 web层

3.3.1 代码

1571657338301

package cn.itcast.web;

import cn.itcast.pojo.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/userQueryAll")
public class UserQueryAllServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 解决获取参数的中文乱码 (浏览器 -> 服务器)
        request.setCharacterEncoding("utf-8");
        // 解决浏览器出现的中文乱码
        response.setContentType("text/html;charset=utf-8");

        // 1 调用业务层 查询所有用户
        UserService userService = new UserServiceImpl();
        List<User> userList = userService.queryAll();
        // 2 将所用用户集合 转成json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(userList);
        // 3 将json字符串返回给浏览器
        response.getWriter().println(json);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

3.3.2 重启测试

http://localhost:9000/day1805/userQueryAll

1571657403652

3.4 页面

3.4.1 导入依赖的js文件

1571657999128

3.4.2 页面

1571658039345

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <table align="center" border="1" cellpadding="10" cellspacing="0" width="50%">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>存款</th>
            <th>操作</th>
        </tr>
        <tr v-for="user in userList">
            <td>{{user.id}}</td>
            <td>{{user.name}}</td>
            <td>{{user.money}}</td>
            <td>
                <a href="javascript:void(0)">删除</a>
                <a href="javascript:void(0)">修改</a>
            </td>
        </tr>
    </table>
</div>
<script src="js/vue.min.js"></script>
<script src="js/axios-0.18.0.js"></script>
<script src="js/user.js"></script>
</body>
</html>

3.4.3 测试

http://localhost:9000/day1805/userList.html

1571658074491

第八章 常见问题汇总

1 tomcat插件重复启动:导致端口占用
2 index.html放到WEB-INF下面,导致访问不到这个html页面
3 名称不叫index.html,结果直接输入localhost:8080,访问不到这个页面
4 关联了jre,需要使用JDK
5 需要使用我给的仓库

第九章 继承

1 why?

需求:

​ a项目 需要mysql包

​ b项目 需要mysql包

​ c项目 需要mysql包

​ 都需要,所以需要配置三次

问题:

​ 重复的代码配置了三次, 次数 100万个项目, 配置100万次

解决:

​ 继承了, 拥有了父类的一切

2 how

2.1 父pom文件

<?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>cn.itcast</groupId>
    <artifactId>itcast_parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <servlet.version>3.1.0</servlet.version>
        <mysql.version>5.1.32</mysql.version>
        <jackson.version>2.5.2</jackson.version>
    </properties>

    <!--问题: 如果父模块有100万个jar包, 而子模块只需要其中的一个, 冲突了-->
    <!--解决: 将依赖管理-->
    <dependencyManagement>
        <dependencies>
            <!--servlet-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet.version}</version>
                <scope>provided</scope>
            </dependency>

            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!--jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--父工程 管理插件-->
    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

2.2 子pom文件

<?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>itcast_parent</artifactId>
        <groupId>cn.itcast</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itcast_dao</artifactId>

    <dependencies>
        <!--mysql
            问题: 父模块有100万个子模块, 如何给一个地方就可以修改所有子模块的版本
        -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--如果子模块发现父模块的版本低, 但是又不能改父模块的版本, 手动修改自己的jar包版本-->
            <version>5.1.38</version>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>

</project>

第十章 聚合工程

1571822613116

1571822628116

1 分析

1535444139772

2 创建父工程

1571757683359

1571757866402

1571757725403

1571757742830

1571757786813

2.1 删除src目录

因为这个项目的唯一作用是用来管理版本的, 所以删掉没有用的src目录

删除完成,如下图

1571757918526

2.2 修改pom.xml管理版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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>cn.itcast.itheima</groupId>
    <artifactId>itheima_parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--pom表示这是一个被继承的模块-->
    <packaging>pom</packaging>

    <!-- 集中定义依赖版本号 -->
    <properties>
        <junit.version>4.12</junit.version>
        <servlet.version>3.1.0</servlet.version>
        <mysql.version>5.1.38</mysql.version>
        <mybatis.version>3.4.5</mybatis.version>
        <slf4j.version>1.6.4</slf4j.version>
        <jackson.version>2.4.2</jackson.version>
    </properties>

    <!-- 1 导入依赖-->
    <dependencyManagement>
        <dependencies>
            <!--junit测试-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>

            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!-- Mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <!--日志-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>

            <!--jackson -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!--servlet-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet.version}</version>
                <scope>provided</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

    <!-- 2 配置插件-->
    <build>
        <plugins>
            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

3 数据层子模块

3.1 创建子模块项目

1571758247586

1571758275176

1571758344641

1571758387771

1571758456799

1571758486904

1571758524723

3.2 pom.xml

1571758543316

<?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>itheima_parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itheima_dao</artifactId>

    <!--java项目-->
    <packaging>jar</packaging>

    <dependencies>
        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>

        <!--日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
    </dependencies>
</project>

3.3 复制内容到 src 目录下

1571758721673

3.4 复制内容到 resources 目录下

1571758801627

3.5 测试

1571759032005

package cn.itcast.mapper;

import cn.itcast.pojo.User;
import cn.itcast.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {

    UserMapper userMapper;
    SqlSession sqlSession;

    @Before
    public void init() throws Exception {
        sqlSession = SqlSessionUtils.openSession();
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void queryAll() {
        List<User> userList = userMapper.queryAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

4 业务层子模块

4.1 创建子模块项目

1571759263156

1571759290140

1571759357195

1571759386610

1571759436199

1571759477172

4.2 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">
    <parent>
        <artifactId>itheima_parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itheima_service</artifactId>

    <dependencies>
        <!--引入dao依赖-->
        <dependency>
            <artifactId>itheima_dao</artifactId>
            <groupId>com.itheima</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>

4.3 复制内容到src目录下

1571759626148

4.4 测试

1571759666090

package cn.itcast.service;


import cn.itcast.pojo.User;
import cn.itcast.service.impl.UserServiceImpl;
import org.junit.Test;

import java.util.List;

public class UserServiceTest {

    @Test
    public void queryAll() {
        UserService userService = new UserServiceImpl();
        List<User> userList = userService.queryAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

5 web层工程

5.1 创建子模块

1571759773164

1571759811629

1571759839291

1571759871194

5.2 改造成web项目

5.2.1 pom文件

<?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>itheima_parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itheima_web</artifactId>

    <!--因为当前模块是web项目,所以指定为war包-->
    <packaging>war</packaging>

    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--指定项目路径-->
                    <path>/</path>
                    <!--指定端口号-->
                    <port>9000</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

5.2.2 补充webapp目录

1571761310525

1571761420838

5.2.3 增加测试页面

1571761705542

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>敢于亮剑,绝不后退!</h1>
</body>
</html>

5.2.4 启动tomcat 方式一

1571761772983

测试:

1571762003244

5.2.5 启动tomcat方式二

1571762143716

1571762259914

1571762287940

1571762332956

1571762502256

5.3 调试 Servlet

5.3.1 pom.xml

1571762839168

<?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>itheima_parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itheima_web</artifactId>

    <!--因为当前模块是web项目,所以指定为war包-->
    <packaging>war</packaging>

    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--指定项目路径-->
                    <path>/</path>
                    <!--指定端口号-->
                    <port>9000</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

5.3.2 编写servlet

1571762910622

package cn.itcast.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 解决获取参数的中文乱码 (浏览器 -> 服务器)
        request.setCharacterEncoding("utf-8");
        // 解决浏览器出现的中文乱码
        response.setContentType("text/html;charset=utf-8");

        response.getWriter().println("你们真的很棒!");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

5.3.3 测试

1571762961879

5.4 复制对应内容到web目录下

5.4.1 复制 servlet到web目录下

1571763283828

5.4.2 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">
    <parent>
        <artifactId>itheima_parent</artifactId>
        <groupId>com.itheima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>itheima_web</artifactId>

    <!--因为当前模块是web项目,所以指定为war包-->
    <packaging>war</packaging>

    <build>
        <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <!--指定项目路径-->
                    <path>/</path>
                    <!--指定端口号-->
                    <port>9000</port>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--引入业务层依赖-->
        <dependency>
            <artifactId>itheima_service</artifactId>
            <groupId>com.itheima</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

5.4.3 启动tomcat报错

1571763398714

  • 原因: 因为仓库中没有 service 的 jar包

  • 解决:

    1571764006201

    1571763708953

    1571763542436

再次启动正常, 测试:

1571764065291

5.5 聚合

问题

每次发布项目都需要依次发布 父模块和依赖的模块, 是不是很麻烦

解决

通过聚合交给父模块管理,一次性发布所有的项目

how

1571764692138

原文地址:https://www.cnblogs.com/anke-z/p/13539898.html