从根上理解Maven拉包原理,搞定Maven全功能 下

简介: 从根上理解Maven拉包原理,搞定Maven全功能 下

属性

在Maven中,对于有些依赖可能需要保证相同的版本,比如Spring相关依赖,那么我们就需要一个机制来保证这些依赖的版本都相同,我们可以使用Maven中的属性,类似编程语言的全局变量。

Maven中有很多属性:

  1. 自定义属性
  2. 内置属性
  3. Setting属性
  4. Java系统属性
  5. 环境变量属性

此处我们重点讲解一下

自定义属性

作用:将一些字符串定义为变量,方便统一维护

使用步骤:还是以ruoyi为例

  1. 定义自定义属性
<properties>
        <ruoyi.version>3.8.1</ruoyi.version>
</properties>
  1. 调用:${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官网上的版本。

image.png

版本管理

pom文件配置

<version>1.0.0.RELEASE</version>

工程版本号约定

工程版本号约定

工程版本

工程版本

环境配置

一个项目,开发环境、测试环境、生产环境的配置文件必然不同,那么Maven就需要进行多环境配置管理

Maven多环境对应Idea中Maven工具的Profiles

image.png

环境配置

配置文件:通过<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,就可以动态调整环境了。

image.png

动态调整环境

私服

Maven私服指的是企业自己搭建的Maven仓库,通过Maven私服,第三方组织可以把自己组织内部的Maven依赖安装到私服上,提供给组织内部使用,搭建完私服之后,通过配置Maven,我们不止可以从中央仓库中获取Maven依赖,还可以从私服中获取Maven依赖。

下图是获取资源的过程,中央仓库的资源会从中央仓库获取,其他资源会从私服仓库获取

image.png

Maven私服

私服搭建

通过Nexus搭建私服

Nexus是Sonatype公司的一款Maven私服产品

下载地址:https://help.sonatype.com/repomanager3/product-information/download

私服搭建

私服仓库介绍

安装好之后我们来看一下私服默认的仓库列表

私服仓库

可以将这些仓库分为三大类

  • 「宿主仓库hosted」 :保存无法从中央仓库获取的资源

  • 自主研发
  • 第三方非开源项目
  • 「代理仓库proxy」

  • 代理远程仓库,通过nexus访问其他公共仓库
  • 「仓库组」 :将若干个仓库组成一个群组,简化配置,它仅仅是一种配置,不是真实的仓库

  • 比如我们可以将二课项目相关的依赖放到一个仓库组中,将抽奖项目的依赖放到一个仓库组中

创建私服仓库

点击create repository

image.png

创建私服仓库

选择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>进行依赖版本管理。



相关文章
|
druid Java 数据库连接
一文带你搞定Maven全功能
在一次需求迭代中,同事要求我把写好的RPC接口打好包上传到公司私服上,我人直接当场懵逼住了。
|
1月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
501 3
|
6月前
|
缓存 弹性计算 Java
云效产品使用报错问题之maven仓设置为私有后,赋予成员权限未生效,拉包401要如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
Java 测试技术 Maven
maven打包全流程原理
maven打包全流程原理
513 0
|
Java 应用服务中间件 Maven
|
存储 Java 程序员
【Maven相关知识 一】Maven基本概念和基本功能
【Maven相关知识 一】Maven基本概念和基本功能
141 0
|
Java 应用服务中间件 测试技术
spring-Bean管理-springboot原理-Maven高级
配置优先 级优先级(低→高) application.yaml(忽略) application.yml application.properties java系统属性(-Dxxx=xxx) 命令行参数(–xxx=xxx) Bean管理
|
消息中间件 JavaScript 小程序
从根上理解Maven拉包原理,搞定Maven全功能 上
从根上理解Maven拉包原理,搞定Maven全功能 上
|
缓存 Java 应用服务中间件
Rainbond构建Java Maven项目原理解读(CI)
本文从流程、原理上解读Rainbond平台如何从Java Maven源代码持续构建服务。
1515 0
|
8天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
55 8