Maven高级
分模块设计与开发
- 分模块设计就是将项目按照功能拆分成若干个子模块。
- 优点:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。
- 分模块设计需要先针对模块功能进行设计,再进行编码实现。不会先将工程开发完毕,然后进行拆分。
继承与聚合
继承
- 继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
- 作用:简化依赖配置、统一管理依赖。
- 实现:<parent> … </parent>
继承实现步骤
- 创建父工程Maven模块,设置打包方式pom(默认jar):在pom.xml中加上
<packaging>pom</packaging>
。
打包方式 | 说明 |
---|---|
jar | 普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行) |
war | 普通web程序打包,需要部署在外部的tomcat服务器中运行 |
pom | 父工程或聚合工程,该模块不写代码,仅进行依赖管理 |
- 在子工程的pom.xml文件中,配置继承关系。
- 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。
注意事项
- Maven中不支持多继承,但支持多重继承。
- 在子工程中,配置了继承关系之后,坐标中的groupId是可以省略的,因为会自动继承父工程的 。
- 子工程中需要指定父工程的相对位置:
<relativePath>父工程的相对位置</relativePath>
,默认为../pom.xml
,如果使用<relativePath/>
或不指定则会从本地仓库或远程仓库中查找这个父工程。 - 若父子工程都配置了同一个依赖的不同版本,以子工程的为准。
版本锁定
- 在Maven中,可以在父工程的pom文件中通过 <dependencyManagement> 来统一管理依赖版本,在这个标签中指定的依赖不会被引入。
<dependencyManagement>
<dependencies>
<!--引入依赖-->
</dependencies>
</dependencyManagement>
- 子工程引入依赖时,无需指定 <version> 版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
自定义属性/引用属性
- 可以在父工程的pom文件中通过 <properties> 来自定义依赖版本属性,如:
<properties>
<自定义标签名>版本号</自定义标签名>
</properties>
- 然后可以在父工程和子工程的pom文件中使用
<version>${自定义标签名}</version>
引用这个依赖。
聚合
- 聚合就是将多个模块组织成一个整体,同时进行项目的构建。
- 聚合工程必须是一个不具有业务功能的“空”工程(有且仅有一个pom文件)。
- 作用:快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)。
使用方法
- 通过 <modules> 设置当前聚合工程所包含的子模块名称:
<!--聚合-->
<modules>
<module>模块相对路径</module>
<module>模块相对路径</module>
...
</modules>
- 聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。
继承与聚合的比较
继承 | 聚合 | |
---|---|---|
作用 | 用于快速构建项目 | 用于简化依赖配置、统一管理依赖 |
相同点 | 聚合与继承的pom.xml文件打包方式均为pom,一般都将两种关系制作到同一个pom文件中 聚合与继承均属于设计型模块,并无实际的模块内容 |
|
不同点 | 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些 | 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己 |
私服
- 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。
- 依赖查找顺序:本地仓库 → 私服 → 中央仓库。
- 私服在企业项目开发中,一个项目/公司,只需要一台即可。
- 私服中有多个仓库,这些仓库分为三种:
- RELEASE:存放上传的RELEASE版jar包。
- SNAPSHOT:存放上传的SNAPSHOT版jar包。
- CENTRAL:存放从中央仓库下载的jar包。
- 项目版本:
- RELEASE(发行版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
- SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中。
资源上传与下载
私服的配置
在Maven的settings.xml配置文件中,做如下配置:
- 在servers标签中,配置访问私服的个人凭证(访问的用户名和密码):
<server>
<id>release仓库名</id>
<username>用户名</username>
<password>密码</password>
</server>
<server>
<id>snapshot仓库名</id>
<username>用户名</username>
<password>密码</password>
</server>
- 在mirrors中只配置我们自己私服的连接地址(如果之前配置过阿里云,需要直接替换掉):
<mirror>
<id>私服名</id>
<mirrorOf>*</mirrorOf>
<url>私服地址</url>
</mirror>
- 在profiles中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用:
<profile>
<id>allow-snapshots</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>私服名</id>
<url>私服地址</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
- 如果需要上传自己的项目到私服上,需要在项目的pom.xml文件中,增加如下配置,来配置项目发布的地址(也就是私服的地址):
<distributionManagement>
<!-- release版本的发布地址 -->
<repository>
<id>release仓库名</id>
<url>release仓库地址</url>
</repository>
<!-- snapshot版本的发布地址 -->
<snapshotRepository>
<id>snapshot仓库名</id>
<url>snapshot仓库地址</url>
</snapshotRepository>
</distributionManagement>
资源上传
直接运行 deploy 生命周期即可 (发布时,建议跳过单元测试)。
资源下载
直接在pom文件中引入依赖即可。
标签:依赖,聚合,JavaWeb,工程,私服,笔记,pom,模块,第十五天 From: https://www.cnblogs.com/zgg1h/p/18115693