1、分模块开发
(1)分模块开发的意义
将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享
(2)分模块开发与设计
分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
2、依赖管理
(1)依赖传递
直接依赖:在当前项目中通过依赖配置建立的依赖关系;
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
(2)依赖冲突
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高;
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的;
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
(3)可选依赖
对某一个依赖可以隐藏。
<optional>true</optional>
(4)排除依赖
<!--排除依赖是隐藏当前资源对应的依赖关系-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
3、聚合
- 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合,聚合用来快速构建项目。
- 聚合工程:通常是一个不具有业务功能的“空”工程(有且仅有一个pom文件)
- 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
- 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
//每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war
<groupId>com.itheima</groupId>
<artifactId>maven_01_parent</artifactId>
<version>1.0-RELEASE</version>
<packaging>pom</packaging>
<!--设置管理的模块名称-->
<modules>
<module>../maven_02_ssm</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
4、继承
继承是为了更好的版本控制,用来快速配置的。
<!--配置当前工程继承自parent工程-->
<parent>
<groupId>com.itheima</groupId>
<artifactId>maven_01_parent</artifactId>
<version>1.0-RELEASE</version>
//意味着在该文件的上一层目录下,不写直接去本地仓库找
<relativePath>../maven_01_parent/pom.xml</relativePath>
</parent>
//父工程中存在可选的依赖配置,子工程调用:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
//不能加版本号,加了就是引入的,不加就是引用父工程
</dependency>
//父工程可选择的依赖配置如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
5、属性
为了修改某个版本号时统一修改。
<!--定义属性-->
<properties>
<spring.version>5.2.10.RELEASE</spring.version>
<junit.version>4.12</junit.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>
<!--<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url>-->
</properties>
//依赖中的版本号用 ${mybatis-spring.version} 代替
- 工程版本:
- SNAPSHOT(快照版本)
- 项目开发过程中临时输出的版本,称为快照版本;
- 快照版本会随着开发的进展不断更新。
- RELEASE(发布版本)
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本。
- SNAPSHOT(快照版本)
- 发布版本
- alpha版
- beta版
- 纯数字版
6、对配置文件的控制
扩大maven对配置文件的控制。
7、多环境开发
maven提供配置多种环境的设定,帮助开发者使用过程中快速切换环境
<!--配置多环境-->
<profiles>
<!--开发环境-->
<profile>
<id>env_dep</id>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.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>
maven上使用多环境构建:
mvn 指令 -P 环境定义 id
mvn install -P pro_env
8、跳过测试
有很多情况下想跳过测试,直接打包。
第一种:一跳全跳过
第二种:指定跳过
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>false</skipTests>
<!--排除掉不参与测试的内容-->
<excludes>
//细粒化某类不参与测试
<exclude>**/BookServiceTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
9、私服
私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。
- Nexus
- Sonatype公司的一款maven私服产品
- 下载地址:https://help.sonatype.com/repomanager3/download
- 启动服务器(命令行启动)
nexus.exe /run nexus
- 访问服务器(默认端口:8081)
- 修改基础配置信息
- 安装路径下etc目录中
nexus-default.properties
文件保存有nexus
基础配置信息,例如默认访问端口
- 安装路径下etc目录中
- 修改服务器运行配置信息
- 安装路径下bin目录中
nexus.vmoptions
文件保存有nexus
服务器启动对应的配置信息,例如默认占用内存空间
- 安装路径下bin目录中
(1)私服仓库分类
(2)本地仓库访问私服配置
- 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的,本地Maven需要知道私服的访问地址以及私服访问的用户名和密码。
- 需要在本地Maven的配置文件
settings.xml
中进行配置。
- 需要在本地Maven的配置文件
<!--配置本地Maven对私服的访问权限-->
<servers>
<server>
<id>itheima-snapshot</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>itheima-release</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
<!--配置私服的访问路径-->
<mirrors>
<mirror>
<!--配置仓库组的ID-->
<id>maven-public</id>
<!--*代表所有内容都从私服获取-->
<mirrorOf>*</mirrorOf>
<!--私服仓库组maven-public的访问路径-->
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
(3)私服资源上传与下载
本地仓库与私服已经建立了连接,接下来我们就需要往私服上上传资源和下载资源,具体的实现步骤为:
<!--在maven中配置当前工程保存在私服中的具体位置-->
<distributionManagement>
<repository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码-->
<id>itheima-release</id>
<!--release版本上传仓库的具体地址-->
<url>http://localhost:8081/repository/itheima-release/</url>
</repository>
<snapshotRepository>
<!--和maven/settings.xml中server中的id一致,表示使用该id对应的用户名和密码-->
<id>itheima-snapshot</id>
<!--snapshot版本上传仓库的具体地址-->
<url>http://localhost:8081/repository/itheima-snapshot/</url>
</snapshotRepository>
</distributionManagement>
mvn deploy
注意:
要发布的项目都需要配置distributionManagement
标签,要么在自己的pom.xml中配置,要么在其父项目中配置,然后子项目中继承父项目即可。
发布成功,在私服中就能看到:
现在发布是在itheima-snapshot仓库中,如果想发布到itheima-release仓库中就需要将项目pom.xml中的version修改成RELEASE即可。
如果想删除已经上传的资源,可以在界面上进行删除操作:
如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。
至此私服的搭建就已经完成,相对来说有点麻烦,但是步骤都比较固定,后期大家如果需要的话,就可以参考上面的步骤一步步完成搭建即可。