属性
在Maven中,对于有些依赖可能需要保证相同的版本,比如Spring相关依赖,那么我们就需要一个机制来保证这些依赖的版本都相同,我们可以使用Maven中的属性,类似编程语言的全局变量。
Maven中有很多属性:
- 自定义属性
- 内置属性
- Setting属性
- Java系统属性
- 环境变量属性
此处我们重点讲解一下
自定义属性
作用:将一些字符串定义为变量,方便统一维护
使用步骤:还是以ruoyi为例
- 定义自定义属性
<properties> <ruoyi.version>3.8.1</ruoyi.version> </properties>
- 调用:${xxx.yyy}
<groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>${ruoyi.version}</version>
内置属性
作用:使用Maven内置属性,快速配置一些文件
${basedir} ${version}
Setting属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
${settings.localRepository}
Java系统属性
作用:读取Java系统属性
调用格式
${user.home}
系统属性查询方式
mvn help:system
环境变量属性
作用:使用Maven环境变量
${env.JAVA_HOME}
版本管理
对于我们的项目来说,如果我们将其放到一些Maven仓库中,那么就需要对其进行版本控制,我们可以看一下一些开源项目的Maven官网上的版本。
版本管理
pom文件配置
<version>1.0.0.RELEASE</version>
工程版本号约定
工程版本号约定
工程版本
工程版本
环境配置
一个项目,开发环境、测试环境、生产环境的配置文件必然不同,那么Maven就需要进行多环境配置管理
Maven多环境对应Idea中Maven工具的Profiles
环境配置
配置文件:通过<profiles>
配置文件配置,一个profile代表一个可选项
<profiles> <profile> <id>local</id> <properties> <!-- 环境标识,需要与配置文件的名称相对应 --> <profiles.active>local</profiles.active> <logging.level>debug</logging.level> </properties> </profile> <profile> <id>dev</id> <properties> <!-- 环境标识,需要与配置文件的名称相对应 --> <profiles.active>dev</profiles.active> <logging.level>debug</logging.level> </properties> <activation> <!-- 默认环境 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> <logging.level>debug</logging.level> </properties> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> <logging.level>warn</logging.level> </properties> </profile> </profiles>
然后我们在application.yml配置文件中设置即可,之后通过设置maven的profiles,就可以动态调整环境了。
动态调整环境
私服
Maven私服指的是企业自己搭建的Maven仓库,通过Maven私服,第三方组织可以把自己组织内部的Maven依赖安装到私服上,提供给组织内部使用,搭建完私服之后,通过配置Maven,我们不止可以从中央仓库中获取Maven依赖,还可以从私服中获取Maven依赖。
下图是获取资源的过程,中央仓库的资源会从中央仓库获取,其他资源会从私服仓库获取
Maven私服
私服搭建
通过Nexus搭建私服
Nexus是Sonatype公司的一款Maven私服产品
下载地址:https://help.sonatype.com/repomanager3/product-information/download
私服搭建
私服仓库介绍
安装好之后我们来看一下私服默认的仓库列表
私服仓库
可以将这些仓库分为三大类
- 「宿主仓库hosted」 :保存无法从中央仓库获取的资源
- 自主研发
- 第三方非开源项目
- 「代理仓库proxy」
- 代理远程仓库,通过nexus访问其他公共仓库
- 「仓库组」 :将若干个仓库组成一个群组,简化配置,它仅仅是一种配置,不是真实的仓库
- 比如我们可以将二课项目相关的依赖放到一个仓库组中,将抽奖项目的依赖放到一个仓库组中
创建私服仓库
点击create repository
创建私服仓库
选择maven2(hosted)
选择maven2
填入仓库名称
填入仓库名称
创建完之后在仓库列表可见,将新建的仓库加入maven-public仓库组,之后通过该仓库组的url访问
仓库列表
点击maven-public仓库组
仓库组
本地仓库访问私服配置
配置本地仓库访问私服的权限(setting.xml文件),如果你想从这个仓库中获取或者部署资源,那么就需要server配置来验证权限,此处可以是不同的账号密码,不同的用户对于仓库的权限也不同。
「配置Servers」
<servers> <server> <id>ticknet-release</id> <username>admin</username> <password>admin</password> </server> <server> <id>ticknet-snapshots</id> <username>admin</username> <password>admin</password> </server> </servers>
「配置setting.xml的Profiles」
<profiles> <profile> <id>artifactory</id> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>repo</id> <name>repo</name> <url>xxxx</url> </repository> <repository> <snapshots/> <id>snapshots</id> <name>snapshots-only</name> <url>xxxx</url> </repository> </repositories> </profile> </profiles>
此处的URL通过这个copy按钮获取。
copy按钮获取URL
「配置激活profiles」
<activeProfiles> <activeProfile>artifactory</activeProfile> </activeProfiles>
之后就可以从私服获取资源了
上传资源到私服
配置项目pom文件
<distributionManagement> <repository> <id>ticknet-release</id> <url>http://localhost:8081/repository/ticknet-release/</url> </repository> <snapshotRepository> <id>ticknet-snapshots</id> <url>http://localhost:8081/repository/ticknet-release/</url> </snapshotRepository> </distributionManagement>
配置完执行生命周期的deploy即可
OK,大功告成。
<dependencyManagement>
的作用
为了规范一个复杂项目中所有子模块的依赖版本,防止出现两个子模块a,b引用同一个依赖,但是一个的版本是1.0,一个的版本是2.0的这种情况。
比如子模块a和b,都引入了x,y,z三个依赖,这三个依赖的版本都要求是相同的的才能匹配上,此时子模块a引入的是1.0的版本,子模块b引入的是2.0的版本,那么最后可能会出现版本不相同导致匹配不上的问题。所以都在父工程的<dependencyManagement>
进行依赖版本管理。