首页 > 其他分享 >Maven进阶

Maven进阶

时间:2024-07-14 21:01:36浏览次数:11  
标签:ssm 依赖 进阶 配置文件 pom Maven POM 模块

一,依赖

1,依赖具有传递性

直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
在这里插入图片描述

2,依赖传递冲突问题

路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
在这里插入图片描述

3,排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <exclusions>
        <exclusion>
            <groupid>org.hanorest</groupid>
            <artifactId>hamorest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
4,依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

其属性值有compile provided runtime system test

5,作用范围

主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范国内)
是否参与打包(package指令范围内)
在这里插入图片描述

6,依赖范围传递性

带有依赖范围的资源在进行传递时,作用范围将受到影响
在这里插入图片描述

二,模块聚合

聚合功能允许你通过一个父POM(Project Object Model)来管理多个子模块。

聚合项目的父POM不会包含实际的源代码,它主要用于声明和管理其子模块。

以下是如何使用Maven聚合的步骤:

1,创建父POM

首先,你需要创建一个Maven项目作为聚合项目的父POM。这个POM应该位于你的所有子模块的顶层目录中。

在pom.xml文件中,你需要添加<packaging>pom</packaging>来指定这是一个聚合项目。

同时,你需要定义<modules>标签来列出所有的子模块。

例如
<project>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.example</groupId>  
  <artifactId>parent-project</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  
  <modules>  
    <module>module1</module>  
    <module>module2</module>  
    <!-- 其他子模块 -->  
  </modules>  
  
  <!-- 其他配置,如依赖管理、插件管理等 -->  
</project>

2,创建子模块

在父POM的同级目录下,为每个子模块创建一个目录,并在每个目录中创建一个新的Maven项目。

每个子模块都应该有自己的pom.xml文件,并且它们的groupIdversion应该与父POM中的相同。

例如,对于module1,其pom.xml可能如下所示:
<project>  
  <parent>  
    <groupId>com.example</groupId>  
    <artifactId>parent-project</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  </parent>  
  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>module1</artifactId>  
  
  <!-- 其他配置,如依赖、插件等 -->  
</project>

3,构建聚合项目

在父POM的目录中运行Maven命令(如mvn clean install)将构建所有的子模块。

Maven将首先构建列在<modules>标签中的第一个子模块,然后依次构建其他子模块。

如果模块间存在依赖关系,某子模块构造前会先构造其依赖模块。

4, 注意

确保父POM和所有子模块的groupIdversion都是相同的。

子模块的artifactId应该是唯一的,并且应该与它们的目录名匹配。

在子模块的pom.xml中,通过<parent>标签引用父POM。

使用<dependencyManagement>在父POM中管理依赖项的版本。

父pom中<modules>标签内确保每个<module>属性值唯一,不出现重复引入相同子模块。

三,模块继承

在 Maven 中使用继承通常涉及到一个父 POM(Parent POM)和多个子模块(Child Modules)。

父 POM 通常包含所有子模块共有的配置,如依赖管理(<dependencyManagement>)、插件管理(<pluginManagement>)、属性(<properties>)等。

子模块则通过 <parent> 元素引用父 POM,从而继承这些配置。

以下是使用 Maven 继承的基本步骤:

1,创建父 POM

首先,你需要创建一个父 POM 文件(例如 pom-parent.xml)。

在这个文件中,你可以定义共有的配置,如 <dependencyManagement> <properties>

注意 <packaging> 设置为 pom,表示这是一个父 POM,它不包含可执行的代码。

<!-- pom-parent.xml -->  
<project>  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.example</groupId>  
    <artifactId>pom-parent</artifactId>  
    <version>1.0.0</version>  
    <packaging>pom</packaging>  

    <name>Parent POM</name>  

    <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <maven.compiler.source>1.8</maven.compiler.source>  
        <maven.compiler.target>1.8</maven.compiler.target>  
        <my.custom.version>1.0.0</my.custom.version>  
        <!-- 定义其他自定义变量 -->  
    </properties>  

    <dependencyManagement>  
        <dependencies>  
            <dependency>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-starter-web</artifactId>  
                <version>2.5.0</version>  
            </dependency>  
            <!-- 其他依赖项管理 -->  
        </dependencies>  
    </dependencyManagement>  

    <!-- 其他共有配置,如插件管理、属性等 -->  
   
    <build>  
        <pluginManagement>  
            <plugins>  
                <plugin>  
                    <groupId>org.apache.maven.plugins</groupId>  
                    <artifactId>maven-compiler-plugin</artifactId>  
                    <version>3.8.1</version>  
                    <configuration>  
                        <!-- 这里可以配置插件的全局设置 -->  
                        <source>1.8</source>  
                        <target>1.8</target>  
                    </configuration>  
                </plugin>  
                <!-- 定义其他插件 -->  
            </plugins>  
        </pluginManagement>  
    </build>  
</project>

2,创建子模块 POM

对于每个子模块,你需要创建一个 POM 文件(例如 pom-child.xml),并在其中通过 <parent> 元素引用父 POM。

在子模块的 <dependencies> 中,你可以直接引用在父 POM 的 <dependencyManagement> 中定义的依赖项,而无需指定版本。

<!-- pom-child.xml -->  
<project>  
    <modelVersion>4.0.0</modelVersion>  
    <parent>  
        <groupId>com.example</groupId>  
        <artifactId>pom-parent</artifactId>  
        <version>1.0.0</version>  
        <!-- 如果父 POM 和子模块在同一个 Maven 仓库中,则不需要指定 <relativePath> -->  
        <!-- <relativePath/>  如果父 POM 不在默认位置,可以通过这个元素指定父 POM 的路径 填写的是父pom.xml的路径 -->  
    </parent>  

    <artifactId>child-module</artifactId>  

    <dependencies>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
            <!-- 无需指定版本,因为版本已在父 POM 的 <dependencyManagement> 中定义 -->  
        </dependency>  
        <!-- 其他依赖项 -->  
        <dependency>  
            <groupId>com.example</groupId>  
            <artifactId>some-dependency</artifactId>  
            <version>${my.custom.version}</version>  <!-- 使用了父模块定义的变量 -->
        </dependency>  
        <!-- 其他依赖项 -->  
    </dependencies>  

    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <!-- 这里不需要指定 <version>,因为它已经在父 POM 中定义 -->  
                <!-- 可以覆盖或添加额外的配置 -->  
                <configuration>  
                    <source>${maven.compiler.source}</source>  
                    <target>${maven.compiler.target}</target>  
                </configuration>  
            </plugin>  
            <!-- 其他插件 -->  
        </plugins>  
    </build>  
    <!-- 其他子模块特有的配置 -->  
</project>

3,构建项目

在命令行中,你可以使用 Maven 命令来构建项目。

由于你使用了继承,因此你需要在包含所有子模块的根目录下执行 Maven 命令,或者分别进入每个子模块的目录并执行 Maven 命令。

例如,在根目录下执行以下命令来构建所有子模块:
mvn clean install

或者,进入子模块的目录并执行相同的命令来单独构建子模块。

这样,你就成功地使用了 Maven 的继承特性来管理多模块项目的配置和依赖项。

三,模块拆分

分模块开发要点:

模块中仅包含当前模块对应的功能类与配置文件
spring核心配置根据模块功能不同进行独立制作
当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
web.xml需要加载所有的spring核心配置文件

### 详细
###### ssm_pojo拆分
新建模块
拷贝原始项目中对应的相关内容到ssm_pojo模块中实体类(User)
配置文件(无)
###### ssm_dao拆分
新建模块
拷贝原始项目中对应的相关内容到ssm_dao模块中
数据层接口(UserDao)
配置文件:保留与数据层相关配置文件(3个)
注意:分页插件在配置中与SqlSessionFactoryBean绑定,需要保留
pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
spring
mybatis
mysql
pagehelper
直接依赖ssm_pojo(对ssm_pojo模块执行instalI指令,将其安装到本地仓库)

###### ssm_service拆分
新建模块
拷贝原始项目中对应的相关内容到ssm_senvice模块中
业务层接口与实现类(UserSenvice、UserSenicelmpl)
配置文件:保留与数据层相关配置文件(1个)
pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
 spring
 junit
直接依赖ssm_dao(对ssm_dao模块执行instalI指令,将其安装到本地仓库)
间接依赖ssm_pojo(由ssm_dao模块负责依赖关系的建立)
修改senvice模块spring核心配置文件名,添加模块名称,格式:applicationContext-senvice.xml
修改dao模块spring核心配置文件名,添加模块名称,格式:applicationContext-dao.xml
修改单元测试引入的配置文件名称,由单个文件修改为多个文件

###### ssm_control拆分
新建模块(使用webapp模板)
 拷贝原始项目中对应的相关内容到ssm_controller模块中
表现层控制器类与相关设置类(UserController、异常相关……
配置文件:保留与表现层相关配置文件(1个)、服务器相关配置文件(1个)
pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标spring
 Springmvc
 jacksonSenvlettomcat服务器插件
直接依赖ssm_senvice(对ssm_senvice模块执行install指令,将其安装到本地仓库)
间接依赖ssm_dao、ssm_pojo
修改web.xml配置文件中加载spring环境的配置文件名称,使用通配,加载所有applicationContext-开始
的配置文件

标签:ssm,依赖,进阶,配置文件,pom,Maven,POM,模块
From: https://blog.csdn.net/2401_83447580/article/details/139453171

相关文章

  • Python爬虫教程第二篇:进阶技巧与实战案例
    Python爬虫教程第二篇:进阶技巧与实战案例在上一篇教程中,我们学习了Python爬虫的基础概念、基本流程以及一个简单的入门实践案例。本篇教程将带领大家进一步探索Python爬虫的进阶技巧,并提供一个实战案例,帮助大家提升爬虫技能。一、进阶技巧处理JavaScript渲染的页面在We......
  • IDEA 中配置 maven
    前言    IDEA中有自带的maven仓库(捆绑的maven3),但是自带的maven下载的依赖包比较缓慢,我们可以自己下载个maven,然后修改配置文件和本地仓库地址。 1.下载maven链接:Maven–WelcometoApacheMaven怎样选择下载的版本呢?这就要看我们IDEA的版本号是多少了,一般......
  • 大规模GPU集群的进阶之路
    大家好,我是卢旗。今天来聊聊GPU。GPU,全称GraphicProcessingUnit,即图形处理器。它的并行处理能力非常强大,能够同时处理多个任务和数据,因此被广泛用于图形渲染、视频处理、深度学习、科学计算等领域。研发团队在负责制定硬件选型策略并设计优化下一代大规模GPU集群的软硬件架......
  • Java进阶之路66问 | 对接口签名是怎么理解的?如何防止接口重放攻击?
    接口签名为什么需要接口签名?现在越来越多的公司以API的形式对外提供服务,这些API接口大多暴露在公网上,所以安全性就变的很重要了。最直接的风险如下:非法使用API服务。(收费接口非法调用)恶意攻击和破坏。(数据篡改、DOS)因此需要设计一些接口安全保护的方式来增强接口......
  • Java进阶之路66问 | 什么是幂等性?如何保证接口的冥等性?
    API设计中的幂等性什么是幂等性幂等性是指无论一个操作执行多少次,最终的结果都是一样的。也就是说,重复执行同一个操作不会改变系统的状态或产生不同的结果。想象你在一栋大楼里等电梯。你按下电梯按钮的5楼按钮键,电梯开始向5楼的位置移动。后面即使你再按几次5楼按钮键,......
  • Python学习笔记36:进阶篇(二十五)pygame的使用之事件监听控制切歌和暂停,继续播放
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • IDEA出错:Cannot resolve plugin org.apache.maven.plugins:maven-install-plugin:3.1.
    问题阐述:无论是怎么创建,都会报这个错,并且项目结构也不完整。这个问题困扰了我一晚上,为了解决它,浏览器问了个遍。网上说的最多的解决方案就是 maven 安装的路径和和本地仓库的目录必须要保持一致(不一致就会出现这个问题)。打开File->Settings-> 解决办法:这里主要......
  • 10个Python函数参数进阶用法及代码优化
    目录1.默认参数值:让函数更加灵活2.关键字参数:清晰的调用方式3.*args:拥抱不确定数量的位置参数4.**kwargs:处理不确定数量的关键字参数5.参数解包:简化多参数的传递6.命名关键字参数:限制关键字参数7.局部变量与全局变量:理解作用域8.高级:装饰器(@decorator)9.Lambd......
  • Maven的setting.xml镜像和私服配置.md
    <repository>和<mirror>在Maven中,和配置项分别出现在不同的配置文件中,并且它们有各自的作用和执行顺序。以下是这些配置项的详细说明和它们之间的关系:<repository>inpom.xml位置:位于项目的pom.xml文件中。作用:定义了特定项目构建时使用的远程仓库,通常用于解决项目依赖的......
  • maven缺失ojdbc6解决方法(手动安装ojdbc6)
     1.下载ojdbc6jar包MVN仓库地址https://mvnrepository.com/artifact/oracle/ojdbc6/11.2.0.3.0jar本地下载地址:链接:https://pan.baidu.com/s/1NsxBM9H54qH1QCR-OV0vwA提取码:phs2--来自百度网盘超级会员V5的分享 2.进入jar包所在文件夹,执行cmd命令cmd终端执行mvninstall......