JavaWeb合集11-Maven高级

news2024/12/27 18:14:03

十一、Maven高级

1、分模块设计与开发

为什么?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。

分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。

在这里插入图片描述

实现步骤(如将utils工具类拆分出来):

  1. 创建一个是maven的模块,名字通常是项目名-功能名。
  2. 在模块中创建与项目相同的包结构
  3. 将对应的util类目录及其相关的工具类创建或拷贝到创建的模块中
  4. 在pom文件中导入util所需的相关依赖
  5. 在项目的pom文件中导入,提取出来的util模块
  6. 运行项目看看是否可以运行成功

2、继承与聚合

概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。

作用:简化依赖配置、统一管理依赖。

实现::父工程坐标

在这里插入图片描述

2.1 继承关系实现
  1. 创建maven模块tlias-parent,该工程为父工程,设置打包方式pom(默认jar)。

    jar:普通模块打包,springboot项目基本都是jar包( 内嵌tomcat运行)
    war:普通web程序打包,需要部署在外部的tomcat服务器中运行
    pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.7.6</version>
            <relativePath/>  <!--父工程路径,这个依赖是spring提供的,直接默认为本地仓库-->
        </parent>
    
        <!--该模块的配置信息-->
        <groupId>com.yhzy</groupId>
        <artifactId>mybatis-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging> <!-- 打包方式应该是pom -->
    
  2. 在子工程的pom.xml文件中,配置继承关系。

    <parent>
    <groupId>com.yhzy</ groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT< /version>
    <relativePath>../tlias-parent/pom.xm1</relativePath>    <!--指定父工程的路径-->
    </parent>
    
  3. 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。

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

注意:

在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,因为会自动继承父工程的。

relativePath指定父工程的pom文件的相对位置(如果不指定,将从本地仓库/远程仓库查找该工程)。

若父子工程都配置了同一个依赖的不同版本,以子工程的为准。

在这里插入图片描述

2.2 版本锁定

当多个模块(不是全部模块)都需要一个相同的依赖的时,为了保证每个模块引入的依赖的版本相同。

在maven中,可以在父工程的pom文件中通过来统一管 理依赖版本。

子工程引入依赖时,无需指定 版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。

在这里插入图片描述

当依赖比较多时,通过上面这种方式来修改版本号也不太方便(查找比较慢),这时可以使用标签来自定义属性/引用属性,在引用依赖时使用${ }来引用变量。

<properties>
            <fastjson.version>1.2.76</fastjson.version>   <!--名字可以自定义,最好知其意-->
             <jwt.jjwt-api.version>0.11.5</jwt.jjwt-api.version>
             <jwt.jjwt-impl.version>0.11.5</jwt.jjwt-impl.version>
             <jwt.jjwt-jackson.version>0.11.5</jwt.jjwt-jackson.version>
    </properties>

    
    <dependencyManagement>
        <dependencies>
            <!--JWT令牌-->
            <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-api -->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-api</artifactId>
                <version>${jwt.jjwt-api.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-impl</artifactId>
                <version>${jwt.jjwt-impl.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt-jackson</artifactId>
                <version>${jwt.jjwt-jackson.version}</version>
            </dependency>


            <!--fastJSON-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

面试题:

与的区别是什么?

  • 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
  • 是统一管 理依赖版本,不会直接依赖,还需要在子工公程中引入所需依赖(无需指定版本)
2.3 聚合

当分模块开发时,需要对项目进行打包,这时就会发现,相关联的模块没有下载到Maven中打包会失败,就需要一个一个模块的进行下载(install)到Maven仓库中,比较繁琐。

聚合:将多个模块组织成一个整体,同时进行项目的构建。快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

聚合工程:一个不具有业务功能的“空”工程(有且仅有一个pom文件),通常就是父工程。

实现:在父工程(聚合工程/parent)maven中可以通过 设置当前聚合工程所包含的子模块名称。

在这里插入图片描述

注意:聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。写完聚合模块配置后,就可以直接在父工程进行打包处理。

3、私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

在这里插入图片描述

3.1 私服的资源上传与下载

RELEASE (发行版本) :功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
SNAPSHOT (快照版本) :功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中。

在这里插入图片描述

  1. 设置私服的访问用户名/密码(settings.xml中的servers标签中配置)

    <!--配置两套-->
    <server>
    <id>maven-releases</id>  <!--发行版-->
    <username>admin</username>
    <password>admin</password>
    </server>
    
    <server>
    <id>maven-snapshots</id>  <!--开发版-->
    <username >admin</username>
    <password>admin</password>
    </server>
    
    
  2. IDEA的maven父工程的pom文件中配置上传(发布) 地址

    <!--配置两套-->
    <distributionManagement>
    <repository>
    <id>maven-releases</id>
    <url>http://192.168.150.101:8081/repository/maven-releases/</ur1>
    </repository>
        
    <snapshotRepository>
    <id>maven-snapshots</id>
    <url>http://192.168.150.101:8081/repository/maven-snapshots/</ur1>
    </snapshotRepository>
    </distributionManagement>
    
  3. 设置私服依赖下载的仓库组地址(settings . xml中的mirrors、profiles中配置)

    <mirror>
    <id>maven-public</id>
    <mirror0f>*</mirror0f>
    <ur1>http://192.168.150.101:8081/repository/maven-pub1ic/</url>
    </mirror>
    
    
    <kprofile>
    <id>allow-snapshots</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
    <repository>
    <id>maven-public</id>
    <ur1>http://192.168.150.101:8081/repository/maven-public/</url>
    <releases>
    <enabled>true</enabled>
    </releases>
    <snapshots>
    <enabled>true</enabled>
    </snapshots>
    </repository>
    </repositories>
    </profile>
    
    
  4. 使用Maven中生命周期里的deploy,进行上传依赖。

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

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

相关文章

mqtt与云服务器

mqtt 目录 mqtt 回顾 云服务器的操作 MQTT协议 -- 将官方库移植到工程 -- 应用 -- 可能会出现的问题&#xff1a; 完整代码 回顾 -- 昨天我们写的AT指令是直接写在main中&#xff0c;在while循环的外面&#xff0c;没有很好的封装&#xff0c;所以今天我们写一个函数…

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护&#xff0c;所以只能用vue3的版本。3版本中使用的是pnpm&#xff08;npm的增强版本&#xff09;下载依赖。使用pnpm安装的node_modules&#xff0c;不能直接复制到离线主机中&#xff08;因为在 pnpm安装过程中&#xff0c;会给依赖的配置文件写死…

qt页面设计

1. Designer 设计师&#xff08;掌握&#xff09; Designer是Qt内置的一款界面设计程序&#xff0c;设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer&#xff0c;如果要在项目中使用Designer程序&#xff0c;只需要在新建项目时&#xff0c;勾选“创建界面文件”选…

基于Springboot+Vue的特殊儿童家长教育能力提升平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

《数据结构》课程综合设计(zzu校园导航)(迪杰斯特拉算法)

一、系统&#xff08;问题&#xff09;描述 目前根据郑州大学主校区面积区域的广大&#xff0c;以及南、北核心教学楼的教室分布密集且较多&#xff1b;另外&#xff0c;多数地图软件无法精细导航到一个具体的地点&#xff0c;容易造成原地转圈的烦恼。但是&#xff0c;我们转…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

Ubuntu22.04虚拟机安装

一、安装介质下载&#xff1a; 在官网下载安装镜像&#xff0c;下载地址https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso 二、操作系统安装&#xff1a; step 1:进入ubuntu的安装界面&#xff0c;直接回车安装。 step 2:选择语言&#xff0c;直接回…

pycharm 找不到conda环境

参考&#xff1a;新版Pycharm解决Conda executable is not found-CSDN博客

软件界面设计深度解析:流程、工具与用户体验

1、什么是软件界面 软件界面设计是指对软件的外观和用户体验进行美化、优化和标准化的过程。这包括软件的启动封面、框架、菜单、标签、安装过程、滚动条、状态栏、面板、图标设计&#xff0c;以及软件的包装和商业化设计。简单来说&#xff0c;我们日常使用微信时所看到的聊天…

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

C++ 11 的 codecvt 与编码转换

1 编码与乱码 乱码产生的主要原因是编码与字符集不匹配&#xff0c;这种不匹配时怎么造成的呢&#xff1f;首先要来了解一下编码和字符集的关系。 1.1 编码与字符集 由于标准的英文 ASCII 已经成了全球标准&#xff0c;每台电脑的 BIOS 里存着一份标准 ASCII 表&#xff08;…

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…

IP数据包格式、ICMP封装步骤

IP数据包格式 版本号&#xff1a;占4位&#xff0c;表示IP协议的版本&#xff0c;目前广泛使用的是IPv4&#xff0c;其版本号为4。 首部长度&#xff1a;占4位&#xff0c;表示IP首部的长度&#xff0c;单位为32位字节。首部长度最小为20字节&#xff0c;最大为60字节。 服务…

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

40系显卡配置Apollo9.0

文章目录 一、下载安装 Apollo 源码1. 克隆 Apollo 源码 二、 启动Apollo环境容器三、 进入Apollo环境四、编译五、启动 Apollo 进行播包验证5.1 获取数据包5.2 启动 Dreamview5.3 在 Dreamview 中播放数据包5.4 通过命令行播放数据包 宿主机基础环境 系统&#xff1a;ubuntu22…

关键词提取技术:TextRank 详解

1. 什么是 TextRank&#xff1f; TextRank 是一种基于图的排序算法&#xff0c;用于从文本中提取关键词和进行自动摘要。它是受 Google 的 PageRank 算法启发而提出的。与 TF-IDF 不同&#xff0c;TextRank 不依赖外部语料库&#xff0c;也不需要训练数据。它通过构建词语之间的…

JavaWeb合集06-MySQL数据库

六、MySQL数据库 关系型数据库(RDBMS)&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一, 便于维护. 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便&#xff0c;可用于复杂…

js中map,filter,find,foreach的用法介绍

js中map&#xff0c;filter&#xff0c;find&#xff0c;foreach的用法介绍 在 JavaScript 中&#xff0c;数组提供了一些常用的迭代方法&#xff0c;如 map、filter、find 和 forEach&#xff0c;这些方法允许你对数组中的每个元素进行操作&#xff0c;下面是它们的用法和区别…

用示波器观测RC一阶电路零输入响应是否激励必须是方波信号

概述 RC一阶电路是一种简单但非常重要的电路&#xff0c;广泛应用于滤波、信号处理和时间常数分析等领域。在研究RC电路的动态特性时&#xff0c;零输入响应&#xff08;Natural Response&#xff09;是一项关键内容。本文将详细解析用示波器观测RC一阶电路零输入响应时&#…

基于 MyBatis Plus 分页封装分页方法

一、前言 作为一个 CRUD 工程师&#xff0c;查询必然少不了&#xff0c;分页查询更是常见&#xff0c;市面上也有很多成熟的分页插件&#xff0c;都各有优缺点&#xff0c;这里整理一下&#xff0c;基于 MybatisPlus 的分页插件进一步封装分页的公共方法。 二、对象封装 其实…