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

Maven框架#

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

第一章 Maven概述#

Copy
擅长管理大型项目 自动管理你需要的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的坐标即可:

Copy
<!--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

Copy
MAVEN_HOME=D:\01_install\03_kaifa\apache-maven-3.6.1 Path=%MAVEN_HOME%\bin;... ...

1571636683606

5 配置本地仓库#

Copy
1、找到Maven解压目录\conf\settings.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

Copy
<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:\01_install\03_kaifa\repository_maven</localRepository>

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

1571637387340

Copy
<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本地控制台, 输入

Copy
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 问题: 解决创建工程缓慢#

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

Copy
-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

Copy
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

Copy
<?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 一个一个测试#

完成测试代码:

Copy
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

Copy
总结: 使用骨架创建的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

Copy
<?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

Copy
<!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

Copy
<?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: 业务类

    Copy
    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: 测试类

    Copy
    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

Copy
<!-- 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插件
Copy
<!-- 配置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坐标
Copy
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>

1530980380837

  • 进行单元测试
Copy
import org.junit.Test; public class DemoTest { @Test public void demo1() { System.out.println("敢于亮剑,绝不后退!"); } }

1530980434008

2.2 导入servlet的依赖#

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

1530980596377

  • 导入servlet的坐标依赖
Copy
<!-- 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语句#

Copy
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)#

Copy
<?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

Copy
package cn.itcast.mapper; import cn.itcast.pojo.User; import java.util.List; public interface UserMapper { /*查询所有*/ public List<User> queryAll(); }

3.1.2 配置文件

1571657003788

Copy
<?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 接口

Copy
package cn.itcast.service; import cn.itcast.pojo.User; import java.util.List; public interface UserService { /** * 查询所有 */ public List<User> queryAll(); }

3.2.2 实现类

Copy
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

Copy
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

Copy
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 重启测试

Copy
http://localhost:9000/day1805/userQueryAll

1571657403652

3.4 页面#

3.4.1 导入依赖的js文件

1571657999128

3.4.2 页面

1571658039345

Copy
<!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 测试

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

1571658074491

第八章 常见问题汇总#

Copy
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文件#

Copy
<?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文件#

Copy
<?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管理版本#

Copy
<?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

Copy
<?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

Copy
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#

Copy
<?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

Copy
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文件

Copy
<?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

Copy
<!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

Copy
<?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

Copy
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 增加业务层依赖

Copy
<?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 聚合#

问题

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

解决

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

how

1571764692138

posted @   _Anke  阅读(11739)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示
CONTENTS