第10章 后端Web进阶(Maven高级)

一、分模块设计与开发

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

策略一:按照功能模块拆分,比如:公共组件、商品模块、搜索模块、购物车模块、订单模块等。

策略二:按层拆分,比如:公共组件、实体类、控制层、业务层、数据访问层。

策略三:按照功能模块+层拆分。

1、实战

创建新工程,web-ai-project03

配置SDK,检查Maven目录

将tlias-web-management项目复制到该模块下,项目结构导入pom.xml

创建新模块

在模块中将pojo包下的所有文件复制过来src下路径要保持一致

将lombok和org.springframework.boot依赖加入

将tlias项目的pojo包删掉

导入tlias-pojo的包后即可使用

XML 复制代码
<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>tlias-pojo</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

创建tlias-utils模块,同上

根据依赖传递,可以直接把依赖剪切过去

3、小结

1.什么是分模块设计?

将项目按照功能模块/层拆分成若干个子模块

2.为什么要分模块设计?

方便项目的管理维护、扩展,也方便模块间的相互引用,资源共享

3.注意事项

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

二、继承

1、继承关系

(1)介绍

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

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

实现:

XML 复制代码
<parent>...</parent>

(2)实现

创建maven模块tlias-parent,该工程为父工程,设置打包方式pom(默认jar)。

在子工程的pom.xml文件中,配置继承关系。

在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。

打包方式:

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

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

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

a、创建父工程

创建模块tlias-parent

只留一个pom.xml文件即可

XML 复制代码
    <parent>
<!--        坐标信息-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.10</version>
<!--        父工程的pom.xml的相对路径-->
<!--        未指定会在本地仓库查找该依赖,没有就在中央仓库查找该依赖-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
b、配置继承关系

tlias-pojo、tlias-utils、tlias-web-management中

父工程和子工程的groupId相同,子工程可以省略

XML 复制代码
<!--    父工程-->
<parent>
    <groupId>com.itheima</groupId>
    <artifactId>tlias-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../tlias-parent/pom.xml</relativePath>
</parent>
<!--<groupId>com.itheima</groupId>-->
<artifactId>tlias-utils</artifactId>
<version>1.0-SNAPSHOT</version>
c、父工程配置共有依赖

加入dependency即可

子工程可以删除

2、版本锁定

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

(1)统一管理版本

XML 复制代码
<!-- 统一管理依赖的版本 -->
<dependencyManagement>
    <dependencies>
        <!--阿里云OSS依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.4</version>
        </dependency>
​
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- no more than 2.3.3-->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>
​
        <!--JWT-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

子工程的版本直接删掉即可

(2)自定义属性/引用属性

XML 复制代码
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
​
    <!--自定义属性-->
    <lombok.version>1.18.34</lombok.version>
    <spring.boot.starter.version>3.2.10</spring.boot.starter.version>
    <aliyun.sdk.version>3.17.4</aliyun.sdk.version>
    <jaxb.api.version>2.3.1</jaxb.api.version>
    <activation.version>1.1.1</activation.version>
    <jaxb.runtime>2.3.3</jaxb.runtime>
    <jjwt.version>0.9.1</jjwt.version>
</properties>

引用版本

XML 复制代码
<version>${spring.boot.starter.version}</version>

三、聚合

主项目在生命周期的打包操作时,需要将其他项模块进行生命周期的install,安装到本地目录

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

聚合工程和父工程是一个工程

聚合工程:一个不具有业务功能的"空"工程(有且仅有一个pom文件)

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

实现:maven中可以通过<modules>设置当前聚合工程所包含的子模块名称

XML 复制代码
<!--聚合哪些模块-->
<modules>
    <module>../tlias-pojo</module>
    <module>../tlias-utils</module>
    <module>../tlias-web-management</module>
</modules>

只需要点父工程生命周期的package打包即可

1.maven中如何实现聚合关系?

XML 复制代码
<modules>...</modules>

2.maven中继承与聚合的联系与区别?

联系:继承与聚合都属于设计型模块 ,打包方式都为pom,常将两种关系制作到同一个pom文件中

区别:

  • 1.继承用于简化依赖配置统一管理依赖版本 ,是在子工程中配置继承关系

  • 2.聚合用于快速构建项目 ,是在**父工程(聚合工程)**中配置聚合的模块

四、私服

1、介绍

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

依赖查找顺序:

本地仓库

私服

中央仓库

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

2、资源上传与下载

项目版本:

central:中央仓库

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

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

找到该文件双击启动私服"D:\install\installpath\nexus\nexus-3.75.1-01\bin\start.bat"

出现Started Sonatype Nexus OSS 3.75.1-01代表启动成功

访问localhost:8081

配置Maven的私服属性

找到路径"D:\install\envresoce\apache-maven-3.9.4\conf\settings.xml"

配置releases仓库和snapshots仓库的用户名和密码

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>
</servers>

配置私服地址

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

启用快照版本和发行版本访问

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

在父工程的pom.xml的结尾,配置版本的上传地址

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

若pom文件中版本不带snapshots,就代表是release版本

在其他工程中,直接会在本地仓库查找,接着就去私服查找了

XML 复制代码
<dependency>
    <groupId>com.itheima</groupId>
    <artifactId>tlias-utils</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

私服用完要把setting.xml里加的注释掉,不然要一直开着这个私服

五、Web开发-总结

Spring MVC是Spring Framework的一部分。是Spring对于web框架开发的支持

相关推荐
暗黑小白1 小时前
路由策略与引擎可替换性
后端·python·ai agent
小罗水1 小时前
第 20 章 高级 RAG 技术与检索优化
人工智能·python·机器学习
神罚天下ET2 小时前
.NET 新增功能系列文章——C# 中的新增功能
开发语言·c#·.net
所愿ღ2 小时前
SSM框架-Spring3
java·开发语言·笔记·spring
bamb002 小时前
一个项目带你入门AI应用开发06
python
liwulin05062 小时前
【ESP32S3】调用百度云语音合成接口后重启
python
m沐沐2 小时前
【机器学习】矿物识别系统实战——六种填充方法×六种模型全面对比
人工智能·python·深度学习·机器学习·矿物识别
软糖姐姐2 小时前
Python:__closure__ 详解
python·闭包·__closure__·自由变量·cell对象
影视飓风TIM2 小时前
C++ STL 完整入门笔记[8]:deque 底层原理深度剖析
开发语言·c++·笔记