maven进阶私服的创建与使用配置
Mave进阶
内容概览
- 分模块开发的意义
- 依赖管理
- 聚合与继承
- 属性管理
- 多环境配置与应用
- 私服
学习目标
- 理解分模块开发的意义
- 能使用聚合工程快速构建项目
- 能够使用继承简单化项目配置
- 能够根据需求配置生产、开发、测试、环境,并在各个环境间切换运行
分模块开发与设计
分模块开发的意义
- 将原始模块按照功能拆分成若干个子模块,方便魔窟间的相互调用,接口共享
分模块开发(模块拆分步骤)
步骤
-
创建Maven模块
-
书写模块代码
注意事项:分模块开发需要先针对模块功能进行设计,在进行编码。不会先将工程开发完毕,然后进行拆分
-
通过maven指令安装模块到本地仓库(insatall指令)
注意事项:团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)
依赖管理
-
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
-
格式:
<!--设置当前项目所依赖的所有jar,一个项目可以设置多个依赖--> <dependencies> <!--设置具体的依赖--> <dependency> <!--依赖所属群组id--> <groupId>org.springframework</groupId> <!--依赖所属项目id--> <artifactId>spring-webmvc</artifactId> <!--依赖版本号--> <version>5.2.10.RELEASE</version> </dependency> </dependencies>
依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置简历的依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间解依赖其他资源
- 依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序越靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
- 可在idea中看mave结构选项内显示哪个优先级哪个大,可以打开看结构关系深度图
可选依赖
-
可选依赖指对外隐藏当前所依赖的资源——不透明
-
可选依赖是隐藏带你给钱工程所依赖的资源,隐藏后对应资源不具有依赖传递性
<optional>true</optional>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> <!--可选依赖是隐藏带你给钱工程所依赖的资源,隐藏后对应资源不具有依赖传递性--> <optional>true</optional> </dependency>
排除依赖
-
排除依赖指主动断开依赖的资源,被排除的资源无需治党版本——不需要
-
在依赖的模块内排除不需要的依赖
<exclusions></exclusions>
<!--依赖domain运行-->
<dependency>
<groupId>com.hcx</groupId>
<artifactId>Maven_03_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖是隐藏当前资源对应的依赖关系-->
<exclusions>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusions>
</dependency>
- 排除依赖资源仅治党GA即可,无需指定V
继承和聚合
聚合
- 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
- 聚合工程:通常是一个不具有业务功能的"空"工程(有且仅有一个pom文件)
- 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,事项对所有包含的模块进行同步构建
- 当工程中某个模块发送更新(变更)时,必须保障工程中已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
聚合工程开发
步骤:
-
创建Maven模块,设置打包类型为pom
<groupId>com.hcx</groupId> <artifactId>maven_01_parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
注意事项:每个maven工程都有对应的打包方式,默认为jar,web工程打包方式为war
-
设置当前聚合工程中所包含的子模块名称
<modules> <module>../Maven_03_pojo</module> <module>../maven_04_dao</module> <module>../springmvc_08_ssm</module> </modules>
注意事项:聚合工程中所包含的模块在进行构建时会更卷模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关,参与聚合的工程无法向上干燥是否参与聚合,只能向下配置哪些模块参与本工程的聚合
继承
- 概念:继承描述的是连个工程间的关系,与java中的继承类似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
- 作用:
- 简化配置
- 减少版本冲突
继承关系开发工程
-
创建Mave模块,设置打包类型为pom
<packageing>pom</packageing>
注意事项:建议父工程打包方式设为pom
-
在父工程的pom文件纵配置依赖关系(子工程将沿用父工程中的依赖关系)
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RRLEASE</version> </dependency> ...... </dependencies>
-
配置子工程中可选的依赖关系
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> ....... </dependencies> </dependencyManagement>
-
在子工程中配置当前使用父工程中可选依赖的坐标
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> </dependencies>
注意事项:子工程中使用父工程中的可选依赖是,仅需要提供群组id和项目id,版本由父工程统一管理,避免版本冲突子工程中还可以定义父工程中没有定义的依赖关系
聚合和继承的区别
- 作用
- 聚合用于快速构建项目
- 继承用于快速配置
- 相同点
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
- 不同点:
- 聚合是当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
属性
属性
解决版本号统一问题
属性的配置与使用
-
定义属性
<!--定义属性--> <properties> <spring.version>5.2.10.RELEASE</spring.version> </properties>
注意事项:properties标签内的标签可自行定义【尽量做到间名知意】
-
引用属性
<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> <spring.version>5.2.10.RELEASE</spring.version> <junit.version>4.12</junit.version> <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url> </properties>
-
配置文件中引用属性
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=${jdbc.url} jdbc.username=root jdbc.password=******
-
开启资源文件目录加载属性的过滤器
<build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
-
配置maven打war包,忽略web.xml检查
<!--配置插件加载proterties文件--> <build> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
其他属性
-
属性列表
- 自定义属性(常用)
- 内置属性
- Setting属性
- Java系统属性
- 环境变量属性
-
表格详细展示(了解)
属性分类 引用格式 示例 自定义属性 $ $ 内置属性 $ ${basedir} $ Setting属性 $ $ Java系统属性 $ $ 环境变量属性 $ $
版本
版本管理
- 工程版本
- SNAPSHOT(快照版本)
- 项目开发过程中临时输出的版本,称为快照版本
- 快照版本会随着开发的进展不断更新
- RELEASE(发布版本)
- 项目开发到静茹阶段里程碑后向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
- SNAPSHOT(快照版本)
- 发布版本
- alpha版
- beta版
- 纯数字版
多环境配置与应用
多环境开发
- mave提供了配置多种环境的设定,帮助开发者使用过程种快速切换环境
-
定义多环境
<!--配置多环境开发--> <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>pro_dep</id> <properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties> </profile> <!--测试环境--> <profile> <id>test_dep</id> <properties> <jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url> </properties> </profile> </profiles>
-
使用多环境(构建过程)
mvn 指令 -P 环境定义id
范例:
mvn install -P pro_env
跳过测试
目的:为了跳过一些没有开发完成的完成测试内容
-
跳过测试
mvn 指令 -D skipTests
-
范例:
mvn install -D skipTests
注意事项:执行的项目构建指令必须包含测试声明周期,否则无效果。例如执行compile生命周期,不经过test生命周期
-
细粒度控制跳过测试
<!--跳过为完成测试的插件--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <skipTests>true</skipTests> <!--包含指定的测试用例--> <includes> <include>**/User*Test.java</include> </includes> <!--排除参与测试的内容--> <excludes> <exclude>**/BookServiceTest.java</exclude> </excludes> </configuration> </plugin> </plugins>
私服
-
私服是一台独立的服务器,用于解决团队内容不的资源共享与资源同步问题
-
Nexus
- Sonatype公司的一款maven私服产品
- 下载地址:https://help.sonatype.com/repomanager3/download
Nexus安装与启动
-
启动服务器(命令行启动)
nexus.exe /run nexus
-
访问服务器(默认端口:8081)
http://localhost:8081
-
修改基础配置信息
- 安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如访问端口
-
修改服务器运行配置信息
- 安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器对应的配置信息,例如默认占用内存空间
私服资源操作流程分析
- 我们的坐标是放在私服的仓库中,下载资源是使用仓库组
私服仓库分类
仓库类别 | 英文名称 | 功能 | 关联操作 |
---|---|---|---|
宿主仓库 | hosted | 保存自主研发+第三方资源 | 上传 |
代理仓库 | proxy | 代理连接中央仓库 | 下载 |
仓库组 | group | 为长裤编组简化下载操作 | 下载 |
资源的上传和下载
本地仓库访问
-
配置位置(setting.xml文件中)
<servers> <!--配置访问私服权限--> <server> <id>hcx-release</id> <username>admin</username> <password>admin</password> </server> <server> <id>hcx-snapshot</id> <username>admin</username> <password>admin</password> </server> </servers>
-
配置位置(setting.xml文件中)
<mirrors> <!--私服的访问路径--> <mirror> <id>maven-public</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public/</url> </mirror> <!--阿里的私服镜像--> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
-
发布命令
mvn deploy
-
私服配置位置(nexus服务器页面设置)