一,依赖
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文件,并且它们的groupId
和version
应该与父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和所有子模块的groupId
和version
都是相同的。
子模块的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