1 . 将java下的一个包(如pojo)单独提取出来成为一个模块,在新建模块的Java下建立pojo包,包下设置原本的pojo类。
2 . 分离出去的pojo模块仍遵循webapp和Java resource格式,pom文件内不添加任何依赖和插件以及打包方式,仅将
<groupId>com.misakimei</groupId>
<artifactId>SSM_02_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
三个信息保存,并在需要这个pojo的模块的pom内添加依赖如下:
<dependency>
<groupId>com.misakimei</groupId>
<artifactId>SSM_02_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
但是,仅仅是如此,编译阶段无法通过,因为这个新建的依赖不在本地仓库内,所以在左栏的maven里寻找需要导入的那个pojo类所在的maven,在Lifecycle内使用install将他加载到本地仓库内
这样,需要依赖这个pojo运行的模块就能正常执行了
关于依赖的版本:
1 . SNAPSHOT 快照版本(常见于将自己的一个模块导入另一个模块,也表示这个版本并非正式版,还在不停的更新迭代)
2 . RELEASE 发行版本(稳定版本)
依赖相关:
依赖的优先级:
依赖的层级越浅,优先度越高
相同层级,配置靠前的依赖覆盖配置靠后的依赖
同级配置了相同依赖的不同版本,先配置的覆盖后配置的
可选依赖:
在依赖内配置<optional>true</optional>标签,这个依赖就将被隐藏起来,当另一个工程引入了这个工程的依赖时,这个optional标注的依赖将不可见,不被传递
排除依赖:
适用于当一个工程导入了另一个工程的依赖时,另一个工程内有一个新工程不需要的依赖(比如,传入这个依赖会导致依赖冲突,造成问题 ),想要排除这个依赖,就需要设置排除依赖
<dependency>
<groupId>com.misakimei</groupId>
<artifactId>SSM_02_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
如上配置两层exclusion标签,将需要排除的依赖的简名写入,这样这个依赖就不会被导入了
聚合与继承:
总结:
两者区别:聚合在父模块内配置关系,进行构建管理;继承在子模块内配置关系,进行配置管理【可劲儿给我谜语人,我就是他妈没听懂】
聚合:
使用前提:
当多个模块共存时,使用 聚合 可以对项目进行快速构建(方便修改,同时开发)
配置方法:
1 . 新建一个模块(这个工程不具备业务功能),pom内打包方式package设置成pom包
2 . 设置管理的模块名称:(新建module双层标签),module标签内添加需要加入聚合的模块名(../模块名这种格式)
例:
<modules>
<module>../SSM_01</module>
<module>../SSM_01_exception</module>
<module>../SSM_01_pojo</module>
</modules>
(这样,这几个模块就纳入这个父模块管理了,可以做到同时开发了)
继承:
使用前提:
当多个模块都需要引入一些相同的依赖时,设置父模块
配置方法:
1 . 设置父模块(方式如上)【这个工程不具备业务功能】
1 . 在需要继承父模块的子模块内添加parent标签,内置父模块的groupId,artifactId,version(这样,父模块的dependence内的依赖就全部继承到这个子模块中了)
relationPath属性:
指定父模块以及其需要继承的pom文件
例:(继承SSM_00_parent这个父模块)
<parent>
<groupId>com.misakimei</groupId>
<artifactId>SSM_00_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../SSM_00_parent/pom.xml</relativePath>
</parent>
版本控制与依赖管理器设置(dependencyManagement):
父模块设置后,在其中设置依赖管理器【示例一】,管理器负责 依赖 的版本控制
注:{
管理器内的依赖既不会出现在父模块内,也不会出现在继承了父模块的子模块内(右栏查看)
需要使用里面依赖的模块要单独配置这个依赖【示例二】,但是不能配置这个依赖的版本,这样,版本只在依赖管理器内配置,版本统一就做到了
}
示例一: 依赖管理器添加junit依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
示例二: 子模块内需要使用junit依赖时,子模块的pom内需要添加的依赖示例:(去除了version,达成了版本统一)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
属性:
总结:
1 . 属性的配置方便了统一修改
2 . 在开发中,可以将所有的依赖的版本都定义成属性,然后以属性的形式配置,这样方便查看
使用前提:
当形如使用三个org.springframework下的依赖,同时使用多次同一个版本时,如果要进行版本修改,逐个修改容易出错
这种情况下,使用 属性 ,将三个相同的version配置成一个属性,这样只需要修改这个属性就可以一次性修改这三个依赖的版本了
配置方法:
设置properties标签,内置自定义名称的属性标签,标签内设置这个标签对应的值
示例:
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
</properties>
像这样,spring.version就赋予了值 5.2.10.RELEASE
当需要使用这个属性时,使用 ${自定义的属性标签名} 即可
示例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
对.properties配置文件(如:jdbc.properties)内的值的属性定义:
1 . 如上在pom内配置properties标签,自定义对应的属性标签
<properties>
<jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
<jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url>
<jdbc.username>root</jdbc.username>
<jdbc.password>794613852</jdbc.password>
</properties>
2 . 在.properties配置文件内使用 ${自定义标签名} 的形式使用配置好的属性
3 . 像这样配置,目前是无法正常运行的,因为这样配置的属性使用范围仅限pom文件内,所以需要设置过滤器,让指定目录下文件的 ${ } 格式可以被解析,这样就可以正常运行了
1 . 在build插件栏内,配置双重resource标签
2 . 内置标签directory,中间填写${}可解析的路径, 模块名/src/main/resources
如果需要将所有模块下的properties文件都纳入${}的使用范围,可以将项目名改成 ${project.basedir} project.basedir是maven自定义的系统属性
示例:
<resources>
<resource>
<!--<directory>SSM_01/src/main/resources</directory>-->
<directory>${project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
多环境开发:
使用前提:
开发时会有不同的开发环境,每一个环境的 jdbc.url 是不一样的,所以要配置多开发环境
使用方法:
1 . 配置双重profiles标签,定义多环境,每一个profile对应一个环境,一般配置三个环境:开发环境,生产环境,测试环境
2 . 在每一个环境内添加id标签,具有唯一性
3 . 添加properties标签,声明这个环境所对应的 jdbc.url属性 ,当需要将一个环境设置为默认时,添加activation标签,内置activeByDefault标签,内填true
<profiles>
<profile>
<id>env_dep</id>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>env_pro</id>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
</properties>
</profile>
<profile>
<id>env_test</id>
<properties>
<jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
</properties>
</profile>
</profiles>
因没有web.xml文件,install时报错:
错误:webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
解决方法:配置属性<failOnMissingWebXml>false</failOnMissingWebXml>,这样就跳过了这个报错(另一种解决方案就是添加上web.xml文件)【还有一种类似的用插件配置的方式】