01-Maven高级

news2024/11/28 2:53:09

回顾

知识目标

第一单元、父子工程

1、为什么使用父子工程?

1.1、痛点1:提高了代码的重用性

父控制器的存在就是为了去除重复,一个项目存在多个模块,可能由多个人开发,比如abc3个模块,3个模块都是基于spring的那么3个开发都需要引入spring的核心jar包,这样就引入了3份,但是使用父子工程,则只需要在父工程中引入了,则子工程自动继承。

1.2、痛点2:提高了模块的分离度

按照以往的创建项目方式,一个maven项目就是一个大工程,一开始还能进行简单的测试编译,但是随着项目的不断变大和复杂化,后期再做改动则可能牵一发而动全身。但是使用父子工程,每个模块都是独立的,他们通过父控制器聚合在一起,这样当你要改动一个模块的时候你改动的也只是这一个模块而已,并不会影响其他的模块。

2、什么是父子工程?

父子工程说白了就是利用Maven的继承,依赖传递性来为我们省略一些重复的配置,通常配置在父模块中,为子模块提供使用,这样可以做到一处声明,处处使用。

2.1、什么是继承

是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定spring的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。

2.2、什么是聚合

项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终会打一个独立的war运行。

3、父子工程的应用

项目需求:使用maven父子工程完成登录并跳转到首页列表

3.1、创建父子工程

3.1.1、创建父工程

在这里插入图片描述在这里插入图片描述
提示:父工程只需要pom.xml文件,要将src目录删除。
在这里插入图片描述#### 3.1.2、在父工程中以module的形式创建domain层子模块
因为domain层不需要页面所以创建控制台项目即可
注意:要在父工程上右键创建模块
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述#### 3.1.3、在父工程中以module的形式创建dao层子模块
因为dao层不需要页面所以创建控制台项目即可
注意:要在父工程上右键创建模块
在这里插入图片描述在这里插入图片描述#### 3.1.4、在父工程中以module形式创建service层子模块
因为service层不需要页面所以创建控制台项目即可
注意:要在父工程上右键创建模块
在这里插入图片描述在这里插入图片描述#### 3.1.5、在父工程中以module形式建web层子模块
注意:web层中包含controller和页面,所以web层要创建maven web工程
在这里插入图片描述在这里插入图片描述在这里插入图片描述创建成功后,父工程的pom.xml中会自动引用所有的子模块
在这里插入图片描述### 3.2、建立继承和依赖关系
在开发中,service要调用dao中的数据,而web又要调用service的数据,且domain又要被其他三层所调用,他们之间的调用关系如下:web->service->dao->domain

但是现在四个子工程相互是没有任何关系的,没有关系就不能调用。我们应该将他们之间关联起来

提示:maven项目之间的引用是通过本地仓库中的jar包进行引用,所以引用前要先将对应的模块打成jar包到本地仓库

3.2.1、配置domain模块的打包方式为jar

<packaging>jar</packaging>

在这里插入图片描述#### 3.2.2、在dao子模块的pom中添加domain子模块的引用关系
在这里插入图片描述#### 3.2.3、在service子模块的pom中添加dao子模块的引用关系
在这里插入图片描述#### 3.2.4、在web子模块的pom中添加service子模块的引用关系
注意:web子模块的打包方式为war包
在这里插入图片描述注意:在maven父子工程中父子工程不用直接建立关系,继承关系是先天的不用建立依赖关系。 平级之间的直接引用叫依赖,依赖不是先天的,需求要后天建立

3.3、在父工程的pom中添加ssm所需坐标

将项目所需的公共坐标添加到父工程的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.woniu</groupId>
    <artifactId>maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>maven-domain</module>
        <module>maven-dao</module>
        <module>maven-service</module>
        <module>maven-web</module>
    </modules>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.3.6</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--aop坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring测试-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--cglib-->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!--spring事务坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
    </dependencies>

    <build>
        <!--解决maven项目不加载静态资源文件-->
        <resources>
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

3.4、编写domain子模块代码

创建实体类,注意实体类要实现序列化接口Serializable

package cn.woniu.domain;

import java.io.Serializable;
import java.math.BigDecimal;

/**
* 用户实体类
*/
public class User implements Serializable {
   private int id;
   private String userName;
   private String passwd;
   //省略Getter和Setter

实体类编写完成后,由于需要被 其他模块引用所以要将实体类发布到本地仓库中
在这里插入图片描述打包完成后本地仓库的cn/woniu目录下就会生成一个maven-domain.jar
在这里插入图片描述### 3.5、编写dao子模块代码

3.5.1、配置数据库连接信息

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test_mybatis?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=Aa123123.

课堂编程

第二单元:解决jar包依赖冲突问题

为什么要解决jar包依赖冲突问题?

如何解决jar包依赖冲突问题?

解决jar包依赖冲突问题的应用

第三单元:Maven私服

为什么要建设Maven私服?

什么是Maven私服?

Maven私服的建设

课堂编程

课堂小结

单元总结

作业

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何设计分布式系统-分布式事务-XA?

以下为个人观点&#xff0c;如有纰漏敬请指正。 如何设计分布式系统-CAP和BASE理论&#xff1f;_技术分子的博客-CSDN博客​​​​​​ 什么是事务&#xff1f; 处理问题整个过程中同时具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)&am…

Fucoidan-PLGA 岩藻多糖-聚乳酸-羟基乙酸共聚物 PLGA-PEG-Fucoidan

Fucoidan-PLGA 岩藻多糖-聚乳酸-羟基乙酸共聚物 PLGA-PEG-Fucoidan 中文名称&#xff1a;岩藻多糖-聚乳酸-羟基乙酸共聚物 英文名称&#xff1a;Fucoidan-PLGA 别称&#xff1a;PLGA修饰岩藻多糖&#xff0c;PLGA-岩藻多糖 岩藻多糖修饰的壳聚糖聚乳酸-羟基乙酸共聚物[poly…

软件测试面试技巧:如何提高面试通过率?这3点一定要做到

对于想要进入到软件测试岗的新手人员来说&#xff0c;面试这一关是非常重要的&#xff0c;它直接关系着你的去留&#xff0c;也关系后续的期待遇问题&#xff0c;那么&#xff0c;有没有什么技巧可以帮忙提高面试通过率呢&#xff1f; 关于这一问题答案&#xff0c;我从这几个方…

云计算模式的优势

PaaS是一种云计算形式&#xff0c;它提供了一个平台&#xff0c;允许开发人员和程序员开发、运行和管理自己的应用&#xff0c;而无需构建和维护相关的基础架构或平台。它就像是一个地基&#xff0c;由专门的平台服务提供商进行搭建和运营&#xff0c;并将该平台以服务的方式提…

D-022 SD/TF卡硬件电路设计

SD/TF卡硬件电路设计1 简介2 SD卡和Micro接口定义3 硬件设计要点4 硬件电路实战1 简介 SD卡按尺寸可以分为&#xff1a;标准SD卡、MiniSD卡、MicroSD卡。SD存储卡是一种基于半导体快闪记忆器的忆器设备。它具有体积小、传输速度快、支持热插拔等优点&#xff0c;在便携式装置领…

无延时直播/超低延时直播画面同步性测试(实测组图)

阿酷TONY / 原创 2022-11-30 / 长沙 / 超多组图 无延时直播/超低延时直播&#xff0c;主要只测试延时情况&#xff0c;没有涉及直播产品的功能、使用操作界面&#xff0c;有兴趣的朋友可以加联系我实际测试哦~~~ 1.无延时直播应用场景 无延时直播/超低延时常见应用场景&a…

用字典统计序列中键和值的数量collections.Counter()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 用字典统计序列中键和值的数量 collections.Counter() 选择题 以下python代码结果错误的一项是? from collections import Counter myList[a,b,a] print(【显示】myList,myList) myDictCoun…

全波形反演的深度学习方法: 第 3 章 常规反演

本章介绍反演的基础知识, 以及工程中的常规反演. 仅供内部培训. 3.1 地震数据采集 地震勘探中常使用人工激发的振动进行数据采集. 相应装置包括: 激发器是产生震动的装置, 如炸药, 地震车 (撞击地面). 在城市道路等具有车辆会产生振动的地方, 也可以不安装这类装置;地震检波…

定时执行专家 —— 定时循环发送UDP消息(例如:控制远程电脑的开机、关机、重启、打开和关闭程序等)

目录 ◆ 定时执行专家 - 发送UDP消息功能 - 设置方法 - 使用注意事项 ◆ 两种发送方式 ◆UDP消息的两种格式类型 ◆ 关于UDP协议 ◆ 定时执行专家 - 发送UDP消息功能 - 设置方法 &#xff08;1&#xff09;点击 “定时执行专家” 工具栏 “新建” 图标&#xff0c;打开…

低温烹饪过程中真空压力的自动控制

摘要&#xff1a;真空低温烹饪法作为已经经典的高品质烹饪方法&#xff0c;并未得到广泛的应用&#xff0c;主要问题是无法针对各种食材进行真空度的准确设定和控制。本文将针对低温烹饪目前存在的真空度控制问题&#xff0c;提出相应的解决方案。解决方案的核心是采用动态平衡…

Microolap DAC for MySQL驱动程序或其他库

Microolap DAC for MySQL驱动程序或其他库 用于MySQL和Delphi/CBuilder(也称为MySQLDAC)的Microolap直接访问组件是一组Borland Delphi/CBuilder组件&#xff0c;允许直接连接到MySQL数据库服务器。DAC for MySQL允许您创建Delphi/CBuilder应用程序&#xff0c;无需BDE、ODBC或…

连表查询数据,将数据分组串联到一起

场景&#xff1a;用户中心&#xff0c;一个用户是对应多个角色的&#xff0c;登录系统之后需要返回用户信息给前端&#xff0c;其中包含多个用户角色 这个时候&#xff0c;group_concat函数就出场了&#xff0c;当然这是针对于MySql去使用&#xff1b; group_concat函数首先根…

PX4代码解析(6)

一、前言 上一节介绍了PX4姿态估计调用函数的流程&#xff0c;这一节分享一下我对PX4姿态解算的解读.首先&#xff0c;要理解PX4姿态解算的程序&#xff0c;要先从传感器的特性入手&#xff0c;这里主要介绍的传感器有加速度计&#xff0c;磁力计&#xff0c;陀螺仪. 二、传感…

GeoServer服务迁移出现 EncryptionOperationNotPossibleException 错误的解决方案

目录1.前言2.GeoServer服务迁移一般流程3.遇到问题4.原因分析5.解决办法6.根本原因分析7.总结1.前言 这几天我在迁移 GeoServer 服务的时候发现&#xff0c;报了一个错&#xff0c;EncryptionOperationNotPossibleException &#xff0c;这个错误的大概意思是加密操作不可用异常…

Jenkins - 打造强大的前端自动化工作流

什么是 Jenkins&#xff1f; Jenkins 是一款业界流行的开源持续集成工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。我们可以利用 Jenkins 来对项目的持续性集成进行管控处理。 Jenkins 任务的创建 这里就简单不再累赘说明 Jenkins 的安装启动…

CF思维训练,2020长春CCPC(A,D)

D. Knowledge Cards(华容道GAME) 题意&#xff1a;给定n*m的矩阵&#xff0c;初始在左上角有一摞牌&#xff0c;从上到下每张的数字构成了一个长度为k的排列&#xff0c;请问在保证1.不能使得牌在移动过程中重叠2.不能让牌反复出现在左上和右下角。这两个条件下&#xff0c;能…

是不是Jenkins大神,看这几个技巧就够

01 Performance插件兼容性问题 自由风格项目中&#xff0c;有使用 Performance 插件收集构建产物&#xff0c;但是截至到目前最新版本&#xff08;Jenkins v2.298&#xff0c;Performance&#xff1a;v3.19&#xff09;&#xff0c;此插件和Jenkins都存在有兼容性问题&#xf…

运筹说 第75期 | 数学家欧拉也玩跨界

莱昂哈德欧拉&#xff08;Leonhard Euler&#xff09;的一生&#xff0c;是为数学发展而奋斗的一生&#xff0c;他不但为数学界作出贡献&#xff0c;更把整个数学推至物理的领域。欧拉杰出的智慧&#xff0c;顽强的毅力&#xff0c;孜孜不倦的奋斗精神和高尚的科学道德&#xf…

用uniapp开发打包多端应用完整指南

一、uni-app项目介绍 用uni-app开发多端项目&#xff0c;一套代码可同时打包出各端小程序、h5和app&#xff0c;uni-app支持通过 HBuilderX可视化界面 和 vue-cli命令行 两种方式创建项目&#xff0c;下面示例项目采用 HBuilderX可视化界面 的方式创建&#xff0c;cli项目可参…

opencv c++ 图像梯度、边缘、锐化

图像梯度的目的&#xff1a; 获取图像上沿着某一方向或多个方向上&#xff0c;像素值的突变图像。 即&#xff1a; 对满足之间相互独立的函数&#xff0c; 求&#xff0c; 1、预备知识 1.1、常见的梯度计算算子 1.2、梯度计算方法 L2法&#xff1a; L1法&#xff1a; 1.3…