JavaWeb合集11-Maven高级

十一、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.mzph.cn/web/55854.shtml

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

相关文章

RabbitMQ下载与配置

安装Erlang Erlang 下载地址如下&#xff1a; https://erlang.org/download/otp_versions_tree.html 安装 RabbitMQ RabbitMQ 下载地址如下&#xff1a; https://www.rabbitmq.com/install-windows.html 查看服务&#xff0c;服务已经正常启动 打开Command Prompt 输入rabb…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

TH-OCR:强大的光学字符识别工具与车牌识别应用

在当今数字化的时代&#xff0c;高效准确地识别文本和图像中的字符变得至关重要。TH-OCR&#xff08;清华 OCR&#xff09;作为一款优秀的光学字符识别软件&#xff0c;以其卓越的性能和广泛的应用场景&#xff0c;受到了众多用户的青睐。其中&#xff0c;车牌识别功能更是在交…

Discuz | 全站多国语言翻译和繁体本地转换插件 特色与介绍

Discuz全站多国语言翻译和繁体本地转换插件 特色与介绍 特殊&#xff1a;集成了2个开源库1.多国语言翻译 来自&#xff1a;github.com/xnx3/translate特色&#xff1a;无限使用接口 免费使用2个翻译端 带有一级和二级缓存 实现秒翻译 2.简体 繁体&#xff08;台湾&#xff09…

springboot项目多个数据源配置 dblink

当项目中涉及到多个数据库连接的时候该如何处理&#xff1f; 在对应的配置文件&#xff0c;配置对应的数据库情况&#xff0c;不过我确实没咋测试对于事务的处理我可以后续在多做测试 配置文件中配置对应的数据源 然后再使用的时候使用这个 DS(“pd_ob”)注解。 然后又长知识…

《计算机视觉》—— 基于dlib库的人检检测

文章目录 一、dlib库的安装1. 通过PyCharm的Settings安装2. 通过Anaconda安装&#xff08;适用于Windows等操作系统&#xff09;3. 通过命令行安装4.懒人安装 二、基于dlib库的人检测1.对图像进行人脸检测2.打开电脑摄像头&#xff0c;检测人脸 一、dlib库的安装 在PyCharm中&…

Vulnhub:Me-and-My-Girlfriend-1

一.环境启动/信息收集 &#xff08;1&#xff09;根据物理地址用nmap的主机发现功能得出IP地址 nmap -P 192.168.138.0/24 //同网段下主机发现得到IP为192.168.138.180&#xff08;2&#xff09;做nmap的目录扫描和端口扫描来发现其他站带以及信息 nmap -p- 192.168.138.180 …

使用CSS Flexbox创建简洁时间轴

使用CSS Flexbox创建简洁时间轴 在网页设计中,时间轴是一种常见且有效的方式来展示事件的顺序和进程。本文将介绍如何使用CSS Flexbox创建一个简洁优雅的时间轴,无需复杂的JavaScript代码。 基本HTML结构 首先,我们需要创建基本的HTML结构: html复制<div class"ti…

Ansible自动化工具

一、Ansible概述 1.1 什么是Ansible Ansible 是一个开源的自动化工具&#xff0c;用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件&#xff08;剧本&#xff0c;Playbooks&#xff09;&#xff0c;轻松管理和配置多个服务器。Ansible 的特点是无…

第十七周:机器学习笔记

第十七周周报 摘要Abstratc一、机器学习——生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;中&#xff09;1. GAN 的理论介绍2. 用JS散度训练存在的问题3. WGAN 算法4. 拓展——流体 总结 摘要 本周周报主要对GAN进行了详细的…

学习笔记——交换——STP(生成树)工作原理

三、工作原理 STP的基本原理是在一个有二层环路的网络中&#xff0c;交换机通过运行STP&#xff0c;自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree)&#xff0c;树节点为某些交换机&#xff0c;树枝为某些链路。当网络拓扑发生变化时&#xff0c;STP…

js简单基础笔记

一 . js特点 1. Js是一门解释型语言&#xff0c;不用编译&#xff0c;而是直接执行 2. js是一门动态语言&#xff0c;其中的任何内容都是不确定的 3. 语法结构和Java&#xff0c;c都很像 4. ​ js是一门面向对象的语言 5.js严格区分大小写 二 . js使用 1…

TiDB 新版本:更稳、更快、更好的数据库体验

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/2d33d7db 本文内容出自&#xff1a;PingCAP 高级顾问 蓝功儒老师 在 9 月 21 日 TiDB 新版本 Meetup 中&#xff0c;PingCAP 高级顾问蓝功儒老师为我们带来了关于 TiDB 新版本的深入分享。TiD…

基于LORA的一主多从监测系统_数据发送

数据上传我这里使用了问询的方式&#xff0c;这样的好处一是可以用来统计节点的存活状态&#xff0c;二是可以避免冲突&#xff0c;主节点通过向从节点发送问询帧&#xff0c;从节点收到问询帧后开始向主节点发送数据&#xff0c;同时我们也可以加入不同的帧类型&#xff0c;比…

4.three.js网格模型介绍和绘制基础点、线、面

4.three.js网格模型介绍和绘制基础点、线、面 1、计算机中3D世界的组成 在计算机世界里&#xff0c;3D世界是由点组成&#xff0c;两个点能够组成一条直线&#xff0c;三个不在一条直线上的点就能够组成一个三角形面&#xff0c;无数三角形面就能够组成各种形状的物体&#x…

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统&#xff0c;现在我们就来实现页面的…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

Java 直接获取 pom.xml 配置的属性值

Java 直接获取 pom.xml 配置的属性值 1.需求描述2.代码示例3.结果演示 系统&#xff1a;Win10 JDK&#xff1a;1.8.0_351 IDEA&#xff1a;2022.3.3 1.需求描述 在开发一个 SpringBoot 项目的时候&#xff0c;需要从 pom.xml 中获取配置的 artifactId&#xff0c;name&#xf…

vscode配置ssh远程连接服务器

注意&#xff1a;重启软件或重启电脑&#xff0c;解决很多问题 一. vscode配置ssh vscode通过ssh连接服务器&#xff08;吐血总结&#xff09;_vscode ssh-CSDN博客 二. VScode无法远程连接主机问题 VSCode远程连接服务器报错&#xff1a;Could not establish connection to…