为什么自己做不出一个好网站,部门网站建设,官方购物网站正品,wordpress手机文章Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发
所谓分模块设计#xff0c;顾名思义指的就是我们在设计一个 Java 项目的时候#xff0c;将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段#xff0c;就可以将一个大的项目拆分成若干… Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发
所谓分模块设计顾名思义指的就是我们在设计一个 Java 项目的时候将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段就可以将一个大的项目拆分成若干个模块每一个模块都是独立的 分模块设计就是将项目按照功能/结构拆分成若干个子模块方便项目的管理维护、拓展也方便模块 键的相互调用、资源共享。 分析 将pojo包下的实体类抽取到一个maven模块中 tlias-pojo将utils包下的工具类抽取到一个maven模块中 tlias-utils其他的业务代码放在tlias-web-management这个模块中在该模块中需要用到实体类 pojo、工具类utils直接引入对应的依赖即可。
注意分模块开发需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕然后进行拆分。
实现
1. 创建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/dependencydependencygroupIdorg.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工具类就可以直接引入依赖。 总结 1). 什么是分模块设计将项目按照功能拆分成若干个子模块 2). 为什么要分模块设计方便项目的管理维护、扩展也方便模块间的相互调用资源共享 3). 注意事项分模块设计需要先针对模块功能进行设计再进行编码。不会先将工程开发完毕然后进行拆分 继承与聚合
在案例项目分模块开发之后啊我们会看到tlias-pojo、tlias-utils、tlias-web-management 中都引入了一个依赖 lombok 的依赖。我们在三个模块中分别配置了一次。
如果是做一个大型的项目这三个模块当中重复的依赖可能会很多很多。如果每一个 Maven 模块里 面我们都来单独的配置一次功能虽然能实现但是配置是比较繁琐的。
继承
我们可以再创建一个父工程 tlias-parent 然后让上述的三个模块 tlias-pojo、tlias utils、tlias-web-management 都来继承这个父工程 。 然后再将各个模块中都共有的依赖都 提取到父工程 tlias-parent中进行配置只要子工程继承了父工程依赖它也会继承下来这样就 无需在各个子工程中进行配置了。 概念继承 描述的是两个工程间的关系与 java 中的继承相似子工程可以继承父工程中的配置信息常见于依赖关系的继承。作用简化依赖配置、统一管理依赖实现parent … /parent 继承关系 Maven 打包方式 jar普通模块打包springboot 项目基本都是 jar 包内嵌 tomcat 运行war普通 web 程序打包需要部署在外部的 tomcat 服务器中运行pom父工程或聚合工程该模块不写代码仅进行依赖管理 实现
1). 创建maven模块 tlias-parent 该工程为父工程设置打包方式pom(默认jar)。
2). 在 子工程 的 pom.xml 文件中配置继承关系。 3). 在 父工程 中配置各个工程共有的依赖子工程会自动继承父工程的依赖。 注意事项 在子工程中配置了继承关系之后坐标中的 groupId 是可以省略的因为会自动继承父工程的 。relativePath 指定父工程的 pom 文件的相对位置如果不指定将从本地仓库/远程仓库查找该工程。../ 代表的上一级目录 若父子工程都配置了同一个依赖的不同版本以子工程的为准。 版本锁定
场景
如果项目中各个模块中都公共的这部分依赖我们可以直接定义在父工程中从而简化子工程的配置。 然而在项目开发中还有一部分依赖并不是各个模块都共有的可能只是其中的一小部分模块中使用 到了这个依赖。
比如在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那此时该怎么做呢
那我们又该如何来解决这个问题如何来统一管理各个依赖的版本呢
答案Maven的版本锁定功能
介绍
在 maven 中可以在父工程的 pom 文件中通过 dependencyManagement 来统一管理依赖版本。 注意事项 在父工程中所配置的 dependencyManagement 只能统一管理依赖版本并不会将这个 依赖直接引入进来。 这点和 dependencies 是不同的。子工程要使用这个依赖还是需要引入的只是此时就无需指定 version 版本号了 父工程统一管理。变更依赖版本只需在父工程中统一变更。 属性配置
我们也可以通过自定义属性及属性引用的形式在父工程中将依赖的版本号进行集中管理维护。 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
/properties
dependencies
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version
/dependency
/dependencies!--统一管理依赖版本--
dependencyManagement
dependencies!--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是统一管理依赖版本不会直接依赖还需要在子工程中引入 所需依赖(无需指定版本) 聚合 聚合将多个模块组织成一个整体同时进行项目的构建。聚合工程一个不具有业务功能的“空”工程有且仅有一个pom文件作用快速构建项目无需根据依赖关系手动构建直接在聚合工程上构建即可 实现 maven 中可以通过 modules 设置当前聚合工程所包含的子模块名称 我们可以在 tlias-parent中添加如下配置来指定当前聚合工程需要聚合的模块 注意事项 聚合工程中所包含的模块在构建时会自动根据模块间的依赖关系设置构建顺序与聚合工程中模块的配置书写位置无关。 继承与聚合对比 作用 1️⃣聚合用于快速构建项目 2️⃣继承用于简化依赖配置、统一管理依赖 相同点 1️⃣聚合与继承的 pom.xml 文件打包方式均为 pom通常将两种关系制作到同一个 pom 文件中 2️⃣聚合与继承均属于设计型模块并无实际的模块内容 不同点 1️⃣聚合是在聚合工程中配置关系聚合可以感知到参与聚合的模块有哪些 2️⃣继承是在子模块中配置关系父模块无法感知哪些子模块继承了自己 私服 介绍 私服是一种特殊的远程仓库它是架设在局域网内的仓库服务用来代理位于外部的中央仓库用于解决团队内部的资源共享与资源同步问题。 依赖查找顺序 本地仓库私服中央仓库 注意事项私服在企业项目开发中一个项目/公司只需要一台即可无需我们自己搭建会使 用即可。 资源上传与下载
步骤分析 资源上传与下载我们需要做三步配置执行一条指令。 第一步配置在maven的配置文件中配置访问私服的用户名、密码。第二步配置在maven的配置文件中配置连接私服的地址(url地址)。第三步配置在项目的pom.xml文件中配置上传资源的位置(url地址)。 配置好了上述三步之后要上传资源到私服仓库就执行执行maven生命周期deploy。 私服仓库说明 RELEASE存储自己开发的RELEASE发布版本的资源。SNAPSHOT存储自己开发的SNAPSHOT发布版本的资源。Central存储的是从中央仓库下载下来的依赖。 项目版本说明 RELEASE(发布版本)功能趋于稳定、当前更新停止可以用于发行的版本存储在私服中的RELEASE仓库中。SNAPSHOT(快照版本)功能不稳定、尚处于开发中的版本即快照版本存储在私服的 SNAPSHOT仓库中。 具体操作
1.设置私服的访问用户名/密码在自己maven安装目录下的conf/settings.xml中的servers中配 置
2.设置私服依赖下载的仓库组地址在自己maven安装目录下的conf/settings.xml中的 mirrors、profiles中配置
3.设置私服依赖下载的 仓库组地址settings.xml 中的 mirrors、profiles 中配置
IDEA的maven工程的pom文件中配置上传发布地址(直接在tlias-parent中配置发布地址) 配置完成之后我们就可以在tlias-parent中执行deploy生命周期将项目发布到私服仓库中。 通过日志我们可以看到这几个模块打的jar包确实已经上传到了私服仓库中由于当前我们的项目 是SNAPSHOT版本所以jar包是上传到了snapshot仓库中。
那接下来我们再来打开私服来看一下
我们看到我们项目中的这几个模块在私服中都有了。 那接下来当其他项目组的开发人员在项目 中就可以直接通过依赖的坐标就可以完成引入对应的依赖此时本地仓库没有就会自动从私服仓 库中下载。
上一节
Web后端开发总结day14-CSDN博客