Java Web —— 扩展(Maven高级)

分模块设计与开发

未分模块设计的问题

不方便项目的维护和管理、项目中的通用组件难以复用

分模块设计

分模块设计就是将项目按照功能/结构拆分成若干个子模块,方便项目的管理维护、拓展,也方便模块 键的相互调用、资源共享。

继承与聚合

做一个大型的项目,这三个模块当中重复的依赖可能会很多很多。如果每一个 Maven 模块里面,我们都来单独的配置一次,功能虽然能实现,但是配置是比较繁琐的。

继承

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

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

步骤

1.创建maven模块 tlias-parent ,该工程为父工程 ,设置打包方式pom

Maven打包方式:

jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)

war:普通web程序打包,需要部署在外部的tomcat服务器中运行

pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

注意:

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

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

版本锁定

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

父工程

XML 复制代码
    <!--统一管理依赖版本-->
    <dependencyManagement>
    <dependencies>
    <!--JWT令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    </dependencies>
 </dependencyManagement>

子工程

XML 复制代码
    <dependencies>
    <!--JWT令牌-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        </dependency>
    </dependencies>

注意

在父工程中所配置的<dependencyManagement>只能**统一管理依赖版本,**并不会将这个依赖直接引入进来。 这点和 <dependencies>是不同的。

子工程要使用这个依赖,还是需要引入的,只是此时就无需指定 <version> 版本号了, 父工程统一管理。

变更依赖版本,只需在父工程中统一变更。

属性配置

可以通过自定义属性及属性引用的形式,在父工程中将依赖的版本号进行集中管理维护。 具体 语法为:

自定义属性

java 复制代码
  <properties>
     <lombok.version>1.18.24</lombok.version>
    </properties>

引用属性

XML 复制代码
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

面试题:

<dependency>与<dependencyManagement>的区别是什么?

<dependency>是直接依赖,在父工程配置了依赖,子工程会直接继承下来。

<dependencyManagement>是统一管理依赖版本,不会直接依赖,还需要在子工程中引入 所需依赖(无需指定版本)

聚合

聚合:将多个模块组织成一个整体,同时进行项目的构建。

聚合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件) 【PS:一般来说,继承关 系中的父工程与聚合关系中的聚合工程是同一个】

作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

实现

在maven中,我们可以在聚合工程中通过 设置当前聚合工程所包含的子模块的名称。我们可以在 tlias-parent中,添加如下配置,来指定当前聚合工程,需要聚合的模块:

java 复制代码
  <!--聚合其它模块-->
    <modules>
        <module>../tlias-pojo</module>
        <module>../tlias-utils</module>
        <module>../tlias-web-management</module>
    </modules>

继承与聚合对比

作用

聚合用于快速构建项目

继承用于简化依赖配置、统一管理依赖

相同点:

聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中

聚合与继承均属于设计型模块,并无实际的模块内容

不同点:

聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

私服

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

依赖查找顺序:

本地仓库

私服仓库

中央仓库

注意事项:

私服在企业项目开发中,一个项目/公司,只需要一台即可(无需我们自己搭建,会使 用即可)。

资源上传与下载

资源上传与下载需要做三步配置,执行一条指令。

第一步配置:在maven的配置文件中配置访问私服的用户名、密码。

第二步配置:在maven的配置文件中配置连接私服的地址(url地址)。

第三步配置:在项目的pom.xml文件中配置上传资源的位置(url地址) 。

配置好了上述三步之后,要上传资源到私服仓库,就执行执行maven生命周期deploy

私服仓库说明

RELEASE:存储自己开发的RELEASE发布版本的资源。

SNAPSHOT:存储自己开发的SNAPSHOT发布版本的资源。

Central:存储的是从中央仓库下载下来的依赖。

项目版本说明

RELEASE(发布版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。

SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的 SNAPSHOT仓库中。

具体操作

使用私服,需要在maven的settings.xml配置文件中,做如下配置:

1.需要在 servers 标签中,配置访问私服的个人凭证(访问的用户名和密码)

XML 复制代码
<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.在 mirrors 中只配置我们自己私服的连接地址(如果之前配置过阿里云,需要直接替换掉)

XML 复制代码
<mirror>
    <id>maven-public</id>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>

3.需要在 profiles 中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用

XML 复制代码
<profile>
    <id>allow-snapshots</id>
        <activation>
        	<activeByDefault>true</activeByDefault>
        </activation>
    <repositories>
        <repository>
            <id>maven-public</id>
            <url>http://192.168.150.101:8081/repository/maven-public/</url>
            <releases>
            	<enabled>true</enabled>
            </releases>
            <snapshots>
            	<enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>

4.如果需要上传自己的项目到私服上,需要在项目的pom.xml文件中,增加如下配置,来配置项目发布的地址(也就是私服的地址)

XML 复制代码
<distributionManagement>
    <!-- release版本的发布地址 -->
    <repository>
        <id>maven-releases</id>
        <url>http://192.168.150.101:8081/repository/maven-releases/</url>
    </repository>
    
    <!-- snapshot版本的发布地址 -->
    <snapshotRepository>
        <id>maven-snapshots</id>
        <url>http://192.168.150.101:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

5.发布项目,直接运行 deploy 生命周期即可 (发布时,建议跳过单元测试)

启动本地私服
  1. 解压: apache-maven-nexus.zip

  2. 进入目录: apache-maven-nexus\nexus-3.39.0-01\bin

  3. 启动服务:双击 start.bat

  4. 访问服务:localhost:8081

  5. 私服配置说明:将上述配置私服信息的 192.168.150.101 改为 localhost

相关推荐
徐小黑ACG22 分钟前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
0白露1 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.2 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐2 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂3 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6224 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL4 小时前
ZGC初步了解
java·jvm·算法
杉之4 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch5 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰5 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法