做网站用源码seo标题优化
- 作者: 五速梦信息网
- 时间: 2026年04月18日 09:52
当前位置: 首页 > news >正文
做网站用源码,seo标题优化,门户网站建设系统,郑州妇科医院哪家好些1. Maven介绍
1.2 初识Maven
1.2.1 什么是Maven
Maven是Apache旗下的一个开源项目#xff0c;是一款用于管理和构建java项目的工具。
官网#xff1a;Maven – Welcome to Apache Maven Apache 软件基金会#xff0c;成立于1999年7月#xff0c;是目前世界上最大的最受…1. Maven介绍
1.2 初识Maven
1.2.1 什么是Maven
Maven是Apache旗下的一个开源项目是一款用于管理和构建java项目的工具。
官网Maven – Welcome to Apache Maven Apache 软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。 开源项目Welcome to The Apache Software Foundation! 1.2.2 Maven的作用
使用Maven能够做什么呢 依赖管理 统一项目结构 项目构建 依赖管理 方便快捷的管理项目依赖的资源(jar包)避免版本冲突问题 当使用maven进行项目依赖(jar包)管理则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中添加一段如下图所示的配置即可实现。 统一项目结构 : 提供标准、统一的项目结构
在项目开发中当你使用不同的开发工具 (如Eclipse、Idea)创建项目工程时 若我们创建的是一个maven工程是可以帮我们自动生成统一、标准的项目目录结构 具体的统一结构如下 目录说明 src/main/java: java源代码目录 src/main/resources: 配置文件信息 src/test/java: 测试代码 src/test/resources: 测试配置文件信息 项目构建 : maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式 如上图所示我们开发了一套系统代码需要进行编译、测试、打包、发布这些操作如果需要反复进行就显得特别麻烦而Maven提供了一套简单的命令来完成项目构建。 综上所述可以得到一个结论Maven是一款管理和构建java项目的工具 2. Maven概述
2.1 Maven介绍
Apache Maven是一个项目管理和构建工具它基于项目对象模型(Project Object Model , 简称: POM)的概念通过一小段描述信息来管理项目的构建、报告和文档。
官网Maven – Welcome to Apache Maven
Maven的作用 方便的依赖管理 统一的项目结构 标准的项目构建流程
2.2 Maven模型 项目对象模型 (Project Object Model) 依赖管理模型(Dependency) 构建生命周期/阶段(Build lifecycle phases) 1). 构建生命周期/阶段(Build lifecycle phases) 以上图中紫色框起来的部分就是用来完成标准化构建流程 。当我们需要编译Maven提供了一个编译插件供我们使用当我们需要打包Maven就提供了一个打包插件供我们使用等。 2). 项目对象模型 (Project Object Model) 以上图中紫色框起来的部分属于项目对象模型就是将我们自己的项目抽象成一个对象模型有自己专属的坐标如下图所示是一个Maven项目 坐标就是资源(jar包)的唯一标识通过坐标可以定位到所需资源(jar包)位置 3). 依赖管理模型(Dependency) 以上图中紫色框起来的部分属于依赖管理模型是使用坐标来描述当前项目依赖哪些第三方jar包 之前我们项目中需要jar包时直接就把jar包复制到项目下的lib目录而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢 答案Maven仓库 2.3 Maven仓库
仓库用于存储资源管理各种jar包 仓库的本质就是一个目录(文件夹)这个目录被用来存储开发中所有依赖(就是jar包)和插件 Maven仓库分为 本地仓库自己计算机上的一个目录(用来存储jar包) 中央仓库由Maven团队维护的全球唯一的。仓库地址Central Repository: 远程仓库(私服)一般由公司团队搭建的私有仓库 当项目中使用坐标引入对应依赖jar包后首先会查找本地仓库中是否有对应的jar包 如果有则在项目直接引用 如果没有则去中央仓库中下载对应的jar包到本地仓库
如果还可以搭建远程仓库(私服)将来jar包的查找顺序则变为 本地仓库 – 远程仓库– 中央仓库
2.4 Maven安装
认识了Maven后我们就要开始使用Maven了那么首先我们要进行Maven的下载与安装。
2.4.1 下载
下载地址Maven – Download Apache Maven
2.4.2 安装步骤
Maven安装配置步骤 解压安装 配置仓库 配置Maven环境变量 1、解压 apache-maven-3.6.1-bin.zip解压即安装 建议解压到没有中文、特殊字符的路径下。如课程中解压到 E:\develop 下。 解压缩后的目录结构如下 bin目录 存放的是可执行命令。mvn 命令重点关注 conf目录 存放Maven的配置文件。settings.xml配置文件后期需要修改 lib目录 存放Maven依赖的jar包。Maven也是使用java开发的所以它也依赖其他的jar包 2、配置本地仓库
2.1、在自己计算机上新一个目录本地仓库用来存储jar包 2.2、进入到conf目录下修改settings.xml配置文件
1). 使用超级记事本软件打开settings.xml文件定位到53行
2). 复制localRepository标签粘贴到注释的外面55行
3). 复制之前新建的用来存储jar包的路径替换掉localRepository标签体内容 3、配置阿里云私服
由于中央仓库在国外所以下载jar包速度可能比较慢而阿里公司提供了一个远程仓库里面基本也都有开源项目的jar包。
进入到conf目录下修改settings.xml配置文件
1). 使用超级记事本软件打开settings.xml文件定位到160行左右
2). 在mirrors标签下为其添加子标签mirror内容如下
mirror idalimaven/id namealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//urlmirrorOfcentral/mirrorOf
/mirror 注意配置的位置在mirrors … /mirrors 中间添加配置。如下图所示 注: 只可配置一个mirror(另一个要注释!) 不然两个可能发生冲突导致jar包无法下载!!!!!!! 4、配置环境变量 Maven环境变量的配置类似于JDK环境变量配置一样 1). 在系统变量处新建一个变量MAVEN_HOME MAVEN_HOME环境变量的值设置为maven的解压安装目录 2). 在Path中进行配置 PATH环境变量的值设置为%MAVEN_HOME%\bin 3). 打开DOS命令提示符进行验证出现如图所示表示安装成功
mvn -v 3. IDEA集成Maven
我们要想在IDEA中使用Maven进行项目构建就需要在IDEA中集成Maven
3.1 配置Maven环境
3.1.1 当前工程设置
1、选择 IDEA中 File Settings Build,Execution,Deployment Build Tools Maven 2、设置IDEA使用本地安装的Maven并修改配置文件及本地仓库路径 Maven home path 指定当前Maven的安装目录 User settings file 指定当前Maven的settings.xml配置文件的存放路径 Local repository 指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目录会自动读取出来, 可以不用手动指定) 3、配置工程的编译版本为21 Maven默认使用的编译版本为5版本过低 上述配置的maven环境只是针对于当前工程的如果我们再创建一个project又恢复成默认的配置了。 要解决这个问题 我们就需要配置全局的maven环境。 3.1.2 全局设置
1、进入到IDEA欢迎页面 选择 IDEA中 File close project 2、打开 All settings , 选择 Build,Execution,Deployment Build Tools Maven 3、配置工程的编译版本为21 这里所设置的maven的环境信息并未指定任何一个project此时设置的信息就属于全局配置信息。 以后我们再创建project默认就是使用我们全局配置的信息。 3.2 Maven项目
3.2.1 创建Maven项目
1、创建一个空项目 2、创建模块选择Maven点击Next 3、填写模块名称坐标信息点击finish创建完成 4、在Maven工程下创建HelloWorld类 Maven项目的目录结构: maven-project01 |— src (源代码目录和测试代码目录) |— main (源代码目录) |— java (源代码java文件目录) |— resources (源代码配置文件目录) |— test (测试代码目录) |— java (测试代码java目录) |— resources (测试代码配置文件目录) |— target (编译、打包生成文件存放目录) 5、编写 HelloWorld并运行
public class HelloWorld {public static void main(String[] args) {System.out.println(Hello Maven …);}
}
3.2.2 POM配置详解
POM (Project Object Model) 指的是项目对象模型用来描述当前的maven项目。 使用pom.xml文件来实现
pom.xml文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd!– POM模型版本 –modelVersion4.0.0/modelVersion
!– 当前项目坐标 –groupIdcom.itheima/groupIdartifactIdmaven_project1/artifactIdversion1.0-SNAPSHOT/version!– 打包方式 –packagingjar/packaging/project
pom文件详解 project pom文件的根标签表示当前maven项目 modelVersion 声明项目描述遵循哪一个POM模型版本 虽然模型本身的版本很少改变但它仍然是必不可少的。目前POM模型版本是4.0.0 坐标 groupId、artifactId、version 定位项目在本地仓库中的位置由以上三个标签组成一个坐标 packaging maven项目的打包方式通常设置为jar或war默认值jar 3.2.3 Maven坐标详解
什么是坐标 Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置 使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成 groupId定义当前Maven项目隶属组织名称通常是域名反写例如com.itheima artifactId定义当前Maven项目名称通常是模块名称例如 order-service、goods-service version定义当前项目版本号
如下图就是使用坐标表示一个项目 注意 上面所说的资源可以是插件、依赖、当前项目。 我们的项目如果被其他的项目依赖时也是需要坐标来引入的。 3.3 导入Maven项目 方式1使用Maven面板快速导入项目
打开IDEA选择右侧Maven面板点击 号选中对应项目的pom.xml文件双击即可 说明如果没有Maven面板选择 View Appearance Tool Window Bars 方式2使用idea导入模块项目
File Project Structure Modules Import Module 找到要导入工程的pom.xml 4. 依赖管理
4.1 依赖配置
依赖指当前项目运行所需要的jar包。一个项目中可以引入多个依赖
例如在当前工程中我们需要用到logback来记录日志此时就可以在maven工程的pom.xml文件中引入logback的依赖。具体步骤如下 在pom.xml中编写dependencies标签 在dependencies标签中使用dependency引入坐标 定义坐标的 groupId、artifactId、version
dependencies!– 第1个依赖 : logback –dependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.11/version/dependency!– 第2个依赖 : junit –dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency
/dependencies 4.点击刷新按钮引入最新加入的坐标 刷新依赖保证每一次引入新的依赖或者修改现有的依赖配置都可以加入最新的坐标 注意事项 如果引入的依赖在本地仓库中不存在将会连接远程仓库 / 中央仓库然后下载依赖这个过程会比较耗时耐心等待 如果不知道依赖的坐标信息可以到mvn的中央仓库https://mvnrepository.com/中搜索 添加依赖的几种方式 利用中央仓库搜索的依赖坐标 利用IDEA工具搜索依赖 熟练上手maven后快速导入依赖 4.2 依赖传递
4.2.1 依赖具有传递性
早期我们没有使用maven时向项目中添加依赖的jar包需要把所有的jar包都复制到项目工程下。如下图所示需要logback-classic时由于logback-classic又依赖了logback-core和slf4j所以必须把这3个jar包全部复制到项目工程下 我们现在使用了maven当项目中需要使用logback-classic时只需要在pom.xml配置文件中添加logback-classic的依赖坐标即可。 在pom.xml文件中只添加了logback-classic依赖但由于maven的依赖具有传递性所以会自动把所依赖的其他jar包也一起导入。 依赖传递可以分为 直接依赖在当前项目中通过依赖配置建立的依赖关系 间接依赖被依赖的资源如果依赖其他资源当前项目间接依赖其他资源 比如以上图中 projectA依赖了projectB。对于projectA 来说projectB 就是直接依赖。 而projectB依赖了projectC及其他jar包。 那么此时在projectA中也会将projectC的依赖传递下来。对于projectA 来说projectC就是间接依赖。 4.2.2 排除依赖
之前我们讲了依赖具有传递性。那么A依赖BB依赖C如果A不想将C依赖进来在maven项目中我们可以通过排除依赖来实现。 排除依赖指主动断开依赖的资源。被排除的资源无需指定版本
dependencygroupIdcom.itheima/groupIdartifactIdmaven-projectB/artifactIdversion1.0-SNAPSHOT/version!–排除依赖, 主动断开依赖的资源–exclusionsexclusiongroupIdjunit/groupIdartifactIdjunit/artifactId/exclusion/exclusions
/dependency 依赖排除示例 maven-projectA依赖了maven-projectBmaven-projectB依赖了Junit。基于依赖的传递性所以maven-projectA也依赖了Junit 使用排除依赖后 4.3 依赖范围
在项目中导入依赖的jar包后默认情况下可以在任何地方使用。 如果希望限制依赖的使用范围可以通过scope标签设置其作用范围。 作用范围 主程序范围有效main文件夹范围内 测试程序范围有效test文件夹范围内 是否参与打包运行package指令范围内 如上图所示给junit依赖通过scope标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境其他环境下不能使用。
scope标签的取值范围
scope值主程序测试程序打包运行范例compile默认YYYlog4jtest-Y-junitprovidedYY-servlet-apiruntime-YYjdbc驱动 4.4 生命周期
4.4.1 介绍
Maven的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建经历哪些阶段。
在Maven出现之前项目构建的生命周期就已经存在软件开发人员每天都在对项目进行清理编译测试及部署。虽然大家都在不停地做构建工作但公司和公司间、项目和项目间往往使用不同的方式做类似的工作。
Maven从大量项目和构建工具中学习和反思然后总结了一套高度完美的易扩展的项目构建生命周期。这个生命周期包含了项目的清理初始化编译测试打包集成测试验证部署和站点生成等几乎所有构建步骤。
Maven对项目构建的生命周期划分为3套相互独立 clean清理工作。 default核心工作。如编译、测试、打包、安装、部署等。 site生成报告、发布站点等。
三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图: 我们看到这三套生命周期里面有很多很多的阶段这么多生命周期阶段其实我们常用的并不多主要关注以下几个
• clean移除上一次构建生成的文件
• compile编译项目源代码
• test使用合适的单元测试框架运行测试(junit)
• package将编译后的文件打包如jar、war等
• install安装项目到本地仓库 Maven的生命周期是抽象的这意味着生命周期本身不做任何实际工作。在Maven的设计中实际任务如源代码编译都交由插件来完成。 IDEA工具为了方便程序员使用maven生命周期在右侧的maven工具栏中已给出快速访问通道 生命周期的顺序是clean – validate – compile – test – package – verify – install – site – deploy
我们需要关注的就是clean – compile – test – package – install 说明在同一套生命周期中我们在执行后面的生命周期时前面的生命周期都会执行。 思考当运行package生命周期时clean、compile生命周期会不会运行 clean不会运行compile会运行。 因为compile与package属于同一套生命周期而clean与package不属于同一套生命周期。 4.4.2 执行
在日常开发中当我们要执行指定的生命周期时有两种执行方式 在idea工具右侧的maven工具栏中选择对应的生命周期双击执行 在DOS命令行中通过maven命令执行 方式一在idea中执行生命周期 选择对应的生命周期双击执行 compile test package install clean 方式二在命令行中执行生命周期 进入到DOS命令行 5. 附录
5.1 更新依赖索引
有时候给idea配置完maven仓库信息后在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了具体做法如下
打开设置—-搜索maven—-Repositories—-选中本地仓库—–点击Update 5.2 清理maven仓库
初始情况下我们的本地仓库是没有任何jar包的此时会从私服去下载如果没有配置就直接从中央仓库去下载可能由于网络的原因jar包下载不完全这些不完整的jar包都是以lastUpdated结尾。此时maven不会再重新帮你下载需要你删除这些以lastUpdated结尾的文件然后maven才会再次自动下载这些jar包。 如果本地仓库中有很多这样的以lastUpadted结尾的文件可以定义一个批处理文件在其中编写如下脚本来删除
set REPOSITORY_PATHE:\develop\apache-maven-3.6.1\mvn_repo
rem 正在搜索…
del /s /q %REPOSITORY_PATH%*.lastUpdated
rem 搜索完毕
pause 操作步骤如下
1). 定义批处理文件del_lastUpdated.bat (直接创建一个文本文件命名为del_lastUpdated后缀名直接改为bat即可 ) 2). 在上面的bat文件上右键—》编辑 。修改文件 修改完毕后双击运行即可删除maven仓库中的残留文件。 6. 分模块设计与开发
6.1 介绍
所谓分模块设计顾名思义指的就是我们在设计一个 Java 项目的时候将一个 Java 项目拆分成多个模块进行开发。
1). 未分模块设计的问题 如果项目不分模块也就意味着所有的业务代码是不是都写在这一个 Java 项目当中。随着这个项目的业务扩张项目当中的业务功能可能会越来越多。
假如我们开发的是一个大型的电商项目里面可能就包括了商品模块的功能、搜索模块的功能、购物车模块、订单模块、用户中心等等。这些所有的业务代码我们都在一个 Java 项目当中编写。
此时大家可以试想一下假如我们开发的是一个大型的电商网站这个项目组至少几十号甚至几百号开发人员这些开发人员全部操作这一个 Java 项目。此时大家就会发现我们项目管理和维护起来将会非常的困难。而且大家再来看假如在我们的项目当中我们自己定义了一些通用的工具类以及通用的组件而公司还有其他的项目组其他项目组也想使用我们所封装的这些组件和工具类其实是非常不方便的。因为 Java 项目当中包含了当前项目的所有业务代码所以就造成了这里面所封装的一些组件会难以复用。 总结起来主要两点问题不方便项目的维护和管理、项目中的通用组件难以复用。 2). 分模块设计
分模块设计我们在进行项目设计阶段就可以将一个大的项目拆分成若干个模块每一个模块都是独立的。 比如我们可以将商品的相关功能放在商品模块当中搜索的相关业务功能我都封装在搜索模块当中还有像购物车模块、订单模块。而为了组件的复用我们也可以将项目当中的实体类、工具类以及我们定义的通用的组件都单独的抽取到一个模块当中。
如果当前这个模块比如订单模块需要用到这些实体类以及工具类或者这些通用组件此时直接在订单模块当中引入工具类的坐标就可以了。这样我们就将一个项目拆分成了若干个模块儿这就是分模块儿设计。 分模块儿设计之后大家再来看。我们在进行项目管理的时候我就可以几个人一组几个人来负责订单模块儿另外几个人来负责购物车模块儿这样更加便于项目的管理以及项目的后期维护。
而且分模块设计之后如果我们需要用到另外一个模块的功能我们直接依赖模块就可以了。比如商品模块、搜索模块、购物车订单模块都需要依赖于通用组件当中封装的一些工具类我只需要引入通用组件的坐标就可以了。 分模块设计就是将项目按照功能/结构拆分成若干个子模块方便项目的管理维护、拓展也方便模块键的相互调用、资源共享。 6.2 实践
6.2.1 分析
好我们明白了什么是分模块设计以及分模块设计的优势之后接下来我们就来看一下我们之前所开发的案例工程。
我们可以看到在这个项目当中除了我们所开发的部门管理以及员工管理、登录认证等相关业务功能以外我们是不是也定义了一些实体类也就是pojo包下存放的一些类像分页结果的封装类PageBean、 统一响应结果Result我们还定义了一些通用的工具类像Jwts、阿里云OSS操作的工具类等等。
如果在当前公司的其他项目组当中也想使用我们所封装的这些公共的组件该怎么办大家可以思考一下。 方案一直接依赖我们当前项目 tlias-web-management 但是存在两大缺点 这个项目当中包含所有的业务功能代码而想共享的资源仅仅是pojo下的实体类以及 utils 下的工具类。如果全部都依赖进来项目在启动时将会把所有的类都加载进来会影响性能。 如果直接把这个项目都依赖进来了那也就意味着我们所有的业务代码都对外公开了这个是非常不安全的。 方案二分模块设计 将pojo包下的实体类抽取到一个maven模块中 tlias-pojo 将utils包下的工具类抽取到一个maven模块中 tlias-utils 其他的业务代码放在tlias-web-management这个模块中在该模块中需要用到实体类pojo、工具类utils直接引入对应的依赖即可。 注意分模块开发需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕然后进行拆分。 PS当前我们是为了演示分模块开发所以是基于我们前面开发的案例项目进行拆分的实际中都是分模块设计然后再开发的。 6.2.2 实现
思路我们分析完毕接下来我们就根据我们分析的思路按照如下模块进行拆分
- 创建maven模块 tlias-pojo存放实体类
A. 创建一个正常的Maven模块模块名tlias-pojo B. 然后在tlias-pojo中创建一个包 com.itheima.pojo (和原来案例项目中的pojo包名一致) C. 将原来案例项目 tlias-web-management 中的pojo包下的实体类复制到tlias-pojo模块中 D. 在 tlias-pojo 模块的pom.xml文件中引入依赖
dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependency
/dependencies
E. 删除原有案例项目tlias-web-management的pojo包【直接删除不要犹豫我们已经将该模块拆分出去了】然后在pom.xml中引入 tlias-pojo的依赖
dependencygroupIdcom.itheima/groupIdartifactIdtlias-pojo/artifactIdversion1.0-SNAPSHOT/version
/dependency 2. 创建Maven模块 tlias-utils存放相关工具类
A. 创建一个正常的Maven模块模块名tlias-utils B. 然后在 tlias-utils 中创建一个包 com.itheima.utils (和原来案例项目中的utils包名一致) C. 将原来案例项目 tlias-web-management 中的utils包下的实体类复制到tlias-utils模块中 D. 在 tlias-utils 模块的pom.xml文件中引入依赖
dependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency
!–阿里云OSS–dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion3.15.1/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version/dependency!– no more than 2.3.3–dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion2.3.3/version/dependency
!–WEB开发–dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion2.7.5/version/dependency
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependency
/dependencies
E. 删除原有案例项目tlias-web-management的utils包【直接删除不要犹豫我们已经将该模块拆分出去了】然后在pom.xml中引入 tlias-utils的依赖
dependencygroupIdcom.itheima/groupIdartifactIdtlias-utils/artifactIdversion1.0-SNAPSHOT/version
/dependency
到此呢就已经完成了模块的拆分拆分出了 tlias-pojo、tlias-utils、tlias-web-management 如果其他项目中需要用到 pojo或者 utils工具类就可以直接引入依赖。 6.3 总结 1). 分模块设计将项目按照功能拆分成若干个子模块 2). 为什么要分模块设计方便项目的管理维护、扩展也方便模块间的相互调用资源共享 3). 注意事项分模块设计需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕然后进行拆分 7. 继承与聚合 在案例项目分模块开发之后啊我们会看到tlias-pojo、tlias-utils、tlias-web-management中都引入了一个依赖 lombok 的依赖。我们在三个模块中分别配置了一次。 如果是做一个大型的项目这三个模块当中重复的依赖可能会很多很多。如果每一个 Maven 模块里面我们都来单独的配置一次功能虽然能实现但是配置是比较繁琐的。
7.1 继承 我们可以再创建一个父工程 tlias-parent 然后让上述的三个模块 tlias-pojo、tlias-utils、tlias-web-management 都来继承这个父工程 。 然后再将各个模块中都共有的依赖都提取到父工程 tlias-parent中进行配置只要子工程继承了父工程依赖它也会继承下来这样就无需在各个子工程中进行配置了。 概念继承描述的是两个工程间的关系与java中的继承相似子工程可以继承父工程中的配置信息常见于依赖关系的继承。 作用简化依赖配置、统一管理依赖
实现 parentgroupId…/groupIdartifactId…/artifactIdversion…/versionrelativePath…./relativePath /parent 这是我们在这里先介绍一下什么是继承以及继承的作用以及在 maven 当中如何来实现这层继承关系。接下来我们就来创建这样一个 parent 父工程我们就可以将各个子工程当中共有的这部分依赖统一的定义在父工程 parent 当中从而来简化子工程的依赖配置。接下来我们来看一下具体的操作步骤。 我们在这里先介绍一下什么是继承以及继承的作用以及在 maven 当中如何来实现这层继承关系。接下来我们就来创建这样一个 parent 父工程我们就可以将各个子工程当中共有的这部分依赖统一的定义在父工程 parent 当中从而来简化子工程的依赖配置。 7.1.1 继承关系 7.1.1.1 思路分析 我们当前的项目 tlias-web-management还稍微有一点特殊因为是一个springboot项目而所有的springboot项目都有一个统一的父工程就是spring-boot-starter-parent。 与java语言类似Maven不支持多继承一个maven项目只能继承一个父工程如果继承了spring-boot-starter-parent就没法继承我们自己定义的父工程 tlias-parent了。 那此时大家可以想一下Java虽然不支持多继承但是可以支持多重继承比如A 继承 B B 继承C。 那在Maven中也是支持多重继承的所以呢我们就可以让 我们自己创建的三个模块都继承tlias-parent而tlias-parent 再继承 spring-boot-starter-parent就可以了。 具体结构如下 7.1.1.2 实现 1). 创建maven模块 tlias-parent 该工程为父工程设置打包方式pom(默认jar)。 工程结构如下 父工程tlias-parent的pom.xml文件配置如下 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.5/versionrelativePath/ !– lookup parent from repository – /parent groupIdcom.itheima/groupId artifactIdtlias-parent/artifactId version1.0-SNAPSHOT/version packagingpom/packaging Maven打包方式 jar普通模块打包springboot项目基本都是jar包内嵌tomcat运行 war普通web程序打包需要部署在外部的tomcat服务器中运行 pom父工程或聚合工程该模块不写代码仅进行依赖管理 2). 在子工程的pom.xml文件中配置继承关系。 parentgroupIdcom.itheima/groupIdartifactIdtlias-parent/artifactIdversion1.0-SNAPSHOT/versionrelativePath../tlias-parent/pom.xml/relativePath /parent artifactIdtlias-utils/artifactId version1.0-SNAPSHOT/version 这里是以 tlias-utils 为例指定了其父工程。其他的模块都是相同的配置方式。 注意 在子工程中配置了继承关系之后坐标中的groupId是可以省略的因为会自动继承父工程的 。 relativePath指定父工程的pom文件的相对位置如果不指定将从本地仓库/远程仓库查找该工程。 ../ 代表的上一级目录 3). 在父工程中配置各个工程共有的依赖子工程会自动继承父工程的依赖。 dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependency /dependencies 此时我们已经将各个子工程中共有的依赖lombok都定义在了父工程中子工程中的这一项依赖就可以直接删除了。删除之后我们会看到父工程中配置的依赖 lombok子工程直接继承下来了。 工程结构说明 我们当前的项目结构为 因为我们是项目开发完毕之后给大家基于现有项目拆分的各个模块tlias-web-management已经存在了然后再创建各个模块与父工程所以父工程与模块之间是平级的。 而实际项目中可能还会见到下面的工程结构 而在真实的企业开发中都是先设计好模块之后再开始创建模块开发项目。 那此时呢一般都会先创建父工程 tlias-parent然后将创建的各个子模块都放在父工程parent下面。 这样层级结构会更加清晰一些。 PS上面两种工程结构都是可以正常使用的没有一点问题。 只不过第二种结构看起来父子工程结构更加清晰、更加直观。 7.1.2 版本锁定 7.1.2.1 场景 如果项目中各个模块中都公共的这部分依赖我们可以直接定义在父工程中从而简化子工程的配置。 然而在项目开发中还有一部分依赖并不是各个模块都共有的可能只是其中的一小部分模块中使用到了这个依赖。 比如在tlias-web-management、tlias-web-system、tlias-web-report这三个子工程中都使用到了jwt的依赖。 但是 tlias-pojo、tlias-utils中并不需要这个依赖那此时这个依赖我们不会直接配置在父工程 tlias-parent中而是哪个模块需要就在哪个模块中配置。 而由于是一个项目中的多个模块那多个模块中我们要使用的同一个依赖的版本要一致这样便于项目依赖的统一管理。比如这个jwt依赖我们都使用的是 0.9.1 这个版本。 那假如说我们项目要升级要使用到jwt最新版本 0.9.2 中的一个新功能那此时需要将依赖的版本升级到0.9.2那此时该怎么做呢
第一步去找当前项目中所有的模块的pom.xml配置文件看哪些模块用到了jwt的依赖。 第二步找到这个依赖之后将其版本version更换为 0.9.2。 问题如果项目拆分的模块比较多每一次更换版本我们都得找到这个项目中的每一个模块一个一个的更改。 很容易就会出现遗漏掉一个模块忘记更换版本的情况。 那我们又该如何来解决这个问题如何来统一管理各个依赖的版本呢 答案Maven的版本锁定功能。 7.1.2.2 介绍 在maven中可以在父工程的pom文件中通过 dependencyManagement 来统一管理依赖版本。 父工程 !–统一管理依赖版本– dependencyManagementdependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency/dependencies /dependencyManagement 子工程 dependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency /dependencies 注意 在父工程中所配置的 dependencyManagement 只能统一管理依赖版本并不会将这个依赖直接引入进来。 这点和 dependencies 是不同的。 子工程要使用这个依赖还是需要引入的只是此时就无需指定 version 版本号了父工程统一管理。变更依赖版本只需在父工程中统一变更。 7.1.2.3 实现 接下来我们就可以将tlias-utils模块中单独配置的依赖将其版本统一交给 tlias-parent 进行统一管理。 具体步骤如下 1). tlias-parent 中的配置 !–统一管理依赖版本– dependencyManagementdependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency!–阿里云OSS–dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion3.15.1/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion1.1.1/version/dependency!– no more than 2.3.3–dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion2.3.3/version/dependency/dependencies /dependencyManagement 2). tlias-utils中的pom.xml配置 如果依赖的版本已经在父工程进行了统一管理所以在子工程中就无需再配置依赖的版本了。 dependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactId/dependency!–阿里云OSS–dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactId/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactId/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactId/dependency!– no more than 2.3.3–dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactId/dependency!–WEB开发–dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency /dependencies 我们之所以在springboot项目中很多时候引入依赖坐标都不需要指定依赖的版本 version 是因为在父工程 spring-boot-starter-parent中已经通过 dependencyManagement对依赖的版本进行了统一的管理维护。 7.1.2.4 属性配置 我们也可以通过自定义属性及属性引用的形式在父工程中将依赖的版本号进行集中管理维护。 具体语法为 1). 自定义属性 propertieslombok.version1.18.24/lombok.version /properties 2). 引用属性 dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion\({lombok.version}/version /dependency 接下来我们就可以在父工程中将所有的版本号都集中管理维护起来。 propertiesmaven.compiler.source11/maven.compiler.sourcemaven.compiler.target11/maven.compiler.targetlombok.version1.18.24/lombok.versionjjwt.version0.9.1/jjwt.versionaliyun.oss.version3.15.1/aliyun.oss.versionjaxb.version2.3.1/jaxb.versionactivation.version1.1.1/activation.versionjaxb.runtime.version2.3.3/jaxb.runtime.version /propertiesdependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion\){lombok.version}/version/dependency /dependencies!–统一管理依赖版本– dependencyManagementdependencies!–JWT令牌–dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion\({jjwt.version}/version/dependency!--阿里云OSS--dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactIdversion\){aliyun.oss.version}/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion\({jaxb.version}/version/dependencydependencygroupIdjavax.activation/groupIdartifactIdactivation/artifactIdversion\){activation.version}/version/dependency!– no more than 2.3.3–dependencygroupIdorg.glassfish.jaxb/groupIdartifactIdjaxb-runtime/artifactIdversion${jaxb.runtime.version}/version/dependency/dependencies /dependencyManagement 版本集中管理之后我们要想修改依赖的版本就只需要在父工程中自定义属性的位置修改对应的属性值即可。 面试题dependencyManagement 与 dependencies 的区别是什么? dependencies 是直接依赖在父工程配置了依赖子工程会直接继承下来。 dependencyManagement 是统一管理依赖版本不会直接依赖还需要在子工程中引入所需依赖(无需指定版本) 7.2 聚合 分模块设计与开发之后啊我们的项目被拆分为多个模块而模块之间的关系可能错综复杂。 那就比如我们当前的案例项目结构如下相对还是比较简单的 此时tlias-web-management 模块的父工程是 tlias-parent该模块又依赖了tlias-pojo、tlias-utils模块。 那此时我们要想将 tlias-web-management 模块打包是比较繁琐的。因为在进行项目打包时maven会从本地仓库中来查找tlias-parent父工程以及它所依赖的模块tlias-pojo、tlias-utils而本地仓库目前是没有这几个依赖的。 所以我们再打包tlias-web-management 模块前需要将 tlias-parent、tlias-pojo、tlias-utils分别执行install生命周期安装到maven的本地仓库然后再针对于 tlias-web-management 模块执行package进行打包操作。 那此时大家试想一下如果开发一个大型项目拆分的模块很多模块之间的依赖关系错综复杂那此时要进行项目的打包、安装操作是非常繁琐的。 而我们接下来要讲解的maven的聚合就是来解决这个问题的通过maven的聚合就可以轻松实现项目的一键构建清理、编译、测试、打包、安装等。 7.2.1 介绍 聚合将多个模块组织成一个整体同时进行项目的构建。 聚合工程一个不具有业务功能的“空”工程有且仅有一个pom文件 【PS一般来说继承关系中的父工程与聚合关系中的聚合工程是同一个】 作用快速构建项目无需根据依赖关系手动构建直接在聚合工程上构建即可
7.2.2 实现 在maven中我们可以在聚合工程中通过 moudules 设置当前聚合工程所包含的子模块的名称。我们可以在 tlias-parent中添加如下配置来指定当前聚合工程需要聚合的模块 !–聚合其他模块– modulesmodule../tlias-pojo/modulemodule../tlias-utils/modulemodule../tlias-web-management/module /modules 那此时我们要进行编译、打包、安装操作就无需在每一个模块上操作了。只需要在聚合工程上统一进行操作就可以了。 测试执行在聚合工程 tlias-parent 中执行 package 打包指令 那 tlias-parent 中所聚合的其他模块全部都会执行 package 指令这就是通过聚合实现项目的一键构建一键清理clean、一键编译compile、一键测试test、一键打包package、一键安装install等。 7.3 继承与聚合对比 作用 聚合用于快速构建项目 继承用于简化依赖配置、统一管理依赖 相同点 聚合与继承的pom.xml文件打包方式均为pom通常将两种关系制作到同一个pom文件中 聚合与继承均属于设计型模块并无实际的模块内容 不同点 聚合是在聚合工程中配置关系聚合可以感知到参与聚合的模块有哪些 继承是在子模块中配置关系父模块无法感知哪些子模块继承了自己 8. 私服 前面我们在讲解多模块开发的时候我们讲到我们所拆分的模块是可以在同一个公司各个项目组之间进行资源共享的。这个模块的资源共享就需要通过我们接下来所讲解的 Maven 的私服来实现。 8.1 场景 在介绍什么是私服之前我们先来分析一下同一个公司两个项目组之间如何基于私服进行资源的共享。 假设现在有两个团队A 和 B。 A 开发了一个模块 tlias-utils模块开发完毕之后将模块打成jar包并安装到了A的本地仓库。 那此时该公司的B团队开发项目时要想使用 tlias-utils 中提供的工具类该怎么办呢 对于maven项目来说是不是在pom.xml文件中引入 tlias-utils的坐标就可以了呢 大家可以思考一下当B团队在maven项目的pom.xml配置文件中引入了依赖的坐标之后maven是如何查找这个依赖的 查找顺序为 1). 本地仓库本地仓库中是没有这个依赖jar包的。 2). 远程中央仓库由于该模块时自己公司开发的远程仓库中也没有这个依赖。 因为目前tlias-utils这个依赖还在A的本地仓库中的。 B电脑上的maven项目是不可能找得到A电脑上maven本地仓库的jar包的。 那此时大家可能会有一个想法因为A和B都会连接中央仓库我们可以将A本地仓库的jar包直接上传到中央仓库然后B从中央仓库中下载tlias-utils这个依赖。 这个想法很美好但是现实很残酷。这个方案是行不通的因为中央仓库全球只有一个不是什么人都可以往中央仓库中来上传jar包的我们是没有权限操作的。 那此时maven的私服就出场了私服其实就是架设在公司局域网内部的一台服务器就是一种特殊的远程仓库。 有了私服之后各个团队就可以直接来连接私服了。 A 连接上私服之后他就可以把jar包直接上传到私服当中。我公司自己内部搭建的服务器我是不是有权限操作呀把jar包上传到私服之后我让 B 团队的所有开发人员也连接同一台私服。连接上这一台私服之后他就会根据坐标的信息直接从私服当中将对应的jar包下载到自己的本地仓库这样就可以使用到依赖当中所提供的一些工具类了。这样我们就可以通过私服来完成资源的共享。 而如果我们在项目中需要使用其他第三方提供的依赖如果本地仓库没有也会自动连接私服下载如果私服没有私服此时会自动连接中央仓库去中央仓库中下载依赖然后将下载的依赖存储在私服仓库及本地仓库中。 8.2 介绍 私服是一种特殊的远程仓库它是架设在局域网内的仓库服务用来代理位于外部的中央仓库用于解决团队内部的资源共享与资源同步问题。 依赖查找顺序 本地仓库 私服仓库 中央仓库 注意事项私服在企业项目开发中一个项目/公司只需要一台即可无需我们自己搭建会使用即可。 8.3 资源上传与下载 8.3.1 步骤分析 资源上传与下载我们需要做三步配置执行一条指令。 第一步配置在maven的配置文件中配置访问私服的用户名、密码。 第二步配置在maven的配置文件中配置连接私服的地址(url地址)。 第三步配置在项目的pom.xml文件中配置上传资源的位置(url地址)。 配置好了上述三步之后要上传资源到私服仓库就执行执行maven生命周期deploy。 私服仓库说明 RELEASE存储自己开发的RELEASE发布版本的资源。 SNAPSHOT存储自己开发的SNAPSHOT发布版本的资源。 Central存储的是从中央仓库下载下来的依赖。 项目版本说明 RELEASE(发布版本)功能趋于稳定、当前更新停止可以用于发行的版本存储在私服中的RELEASE仓库中。 SNAPSHOT(快照版本)功能不稳定、尚处于开发中的版本即快照版本存储在私服的SNAPSHOT仓库中。 8.3.2 具体操作 为了模拟企业开发这里我准备好了一台服务器192.168.150.101私服已经搭建好了我们可以访问私服测试 私服准备好了之后我们要做如下几步配置 1.设置私服的访问用户名/密码在自己maven安装目录下的conf/settings.xml中的servers中配置 serveridmaven-releases/idusernameadmin/usernamepasswordadmin/password /serverserveridmaven-snapshots/idusernameadmin/usernamepasswordadmin/password /server 2.设置私服依赖下载的仓库组地址在自己maven安装目录下的conf/settings.xml中的mirrors、profiles中配置 mirroridmaven-public/idmirrorOf*/mirrorOfurlhttp://192.168.150.101:8081/repository/maven-public//url /mirror profileidallow-snapshots/idactivationactiveByDefaulttrue/activeByDefault/activationrepositoriesrepositoryidmaven-public/idurlhttp://192.168.150.101:8081/repository/maven-public//urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository/repositories /profile 3.IDEA的maven工程的pom文件中配置上传发布地址(直接在tlias-parent中配置发布地址) distributionManagement!– release版本的发布地址 –repositoryidmaven-releases/idurlhttp://192.168.150.101:8081/repository/maven-releases//url/repository!– snapshot版本的发布地址 –snapshotRepositoryidmaven-snapshots/idurlhttp://192.168.150.101:8081/repository/maven-snapshots//url/snapshotRepository /distributionManagement 配置完成之后我们就可以在tlias-parent中执行deploy生命周期将项目发布到私服仓库中。 通过日志我们可以看到这几个模块打的jar包确实已经上传到了私服仓库中由于当前我们的项目是SNAPSHOT版本所以jar包是上传到了snapshot仓库中。 那接下来我们再来打开私服来看一下 我们看到我们项目中的这几个模块在私服中都有了。 那接下来当其他项目组的开发人员在项目中就可以直接通过依赖的坐标就可以完成引入对应的依赖此时本地仓库没有就会自动从私服仓库中下载。
- 上一篇: 做网站用语言网站开发主要学些什么软件
- 下一篇: 做网站优化词怎么选择近期做网站需要什么软件
相关文章
-
做网站用语言网站开发主要学些什么软件
做网站用语言网站开发主要学些什么软件
- 技术栈
- 2026年04月18日
-
做网站用图片网站里的个人中心下拉列表怎么做
做网站用图片网站里的个人中心下拉列表怎么做
- 技术栈
- 2026年04月18日
-
做网站用突发性实例可以吗上海十大集团
做网站用突发性实例可以吗上海十大集团
- 技术栈
- 2026年04月18日
-
做网站优化词怎么选择近期做网站需要什么软件
做网站优化词怎么选择近期做网站需要什么软件
- 技术栈
- 2026年04月18日
-
做网站优化就是发文章吗老网站文章突然无收录
做网站优化就是发文章吗老网站文章突然无收录
- 技术栈
- 2026年04月18日
-
做网站优化有必要广州专业网站建设性价比高
做网站优化有必要广州专业网站建设性价比高
- 技术栈
- 2026年04月18日
