现如今已经不是以前单兵作战时代,越来越多的需求,促使我们项目去实现动态组件化开发。
这个时候组件化发布共享就显的尤为重要。
这篇文章我们就来讲解下如何使用maven进行组件化发布
在讲解组件化发布之前,我们先来了解一些基础概念
基础概念:1.pompom:全名project object model 项目对象模型,用来描述当前maven项目发布模块的基础信息
pom主要节点信息如下:
配置描述举例('com.android.tools.build:gradle:4.1.1')
groupid 组织 / 公司的名称 com.android.tools.build
artifactid 组件的名称 gradle
version 组件的版本 4.1.1
packaging 打包的格式 aar
2.仓库我们在开发中经常使用到第二/三方插件或者第二/三方库,就是存储在仓库中的
2.1:仓库种类:本地仓库 :存储在本地设备中的仓库以及远程仓库中下载保存的仓库,统称为本地仓库
私有仓库 :公司内部仓库,比如是有maven私服搭建的局域网仓库
中央仓库 :开源社区仓库,我们平时使用的第三方插件或者类库一般都存储在中央仓库,比如maven central,阿里的国内镜像库等
1.maven库介绍.png
2.2:仓库构建顺序:1.在本地仓库中查找对应的类库,没有找到执行22.按照repositories中声明的仓库顺序,在私有仓库和中央仓库查找对应的类库,找到则将类库版本信息下载到本地仓库,没找到则执行33.前面都没找到对应的类库或者类库版本,则抛出异常‘没找到对应的类库’
仓库执行顺序.awebp
2.3:仓库声明方式:项目build.gradle:
buildscript { repositories { [gradle 插件的仓库] }}allprojects { repositories { [项目中所有模块依赖的仓库] }}模块内build.gradle:
repositories{ [当前模块依赖的仓库]}gradle支持的仓库类型:
repositories{ maven { url '...' } ivy { url '...' } flatdir { dirs '...' }}常用的中央仓库:
google() // https://dl.google.com/dl/android/maven2/mavencentral() // https://repo.maven.apache.org/maven2/jcenter()网络不好的情况下,访问上面的中央仓库会有点慢:可以开考虑使用国内镜像代理
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}3.有了release版本为啥还需要snapshot?区别:
1.release版本每次升级都需要更新版本,而snapshot不需要更新版本,使用原版本即可2.release版本如果版本没有更新不需要每次都去下载,除非本地仓库被清除,而snapshot版本每次编译都需要去中央仓库更新版本信息3.常规release版本是发布上线的版本,snapshot是测试版本。4.版本名:release版本:1.0.0,snapshot版本:1.0.0-snapshot使用场景:
a和b共同开发,如果a修改了代码,
使用常规release版本则需要每次都发布一个新版本,如果不小心忘记增加版本,b则无法收到更新后的版本,
造成代码不同步,后期会出现不可预料的bug。
使用snapshot只要a发布了版本,b在每次编译时就可以立即收到a的类库更新信息,可以实时同步代码。
snapshot以牺牲编译时间换取代码之间的立即可见度,缺点就是在网络较差的情况下代码编译时间可能常常比较慢。
如何发布组件:1.发布到本地仓库:模块级:build.gradle
plugins { id 'groovy' // groovy language// id 'org.jetbrains.kotlin.jvm' // kotlin id 'java-gradle-plugin' // java gradle plugin id 'maven'}...uploadarchives { repositories { mavendeployer { repository(url:uri('d:/maven_local')) pom.groupid = 'com.yuhb.upload' pom.artifactid = 'upload' pom.version = '1.0.1' } }}同步模块后:点击gradle面板中对应模块下tasks:upload里面的uploadarchives任务
如果执行成功:则会在对应的本地目录下找到类库信息:
2.搭建maven私服创建私有仓库:简介maven私服其实就是在部门·局域网·中设置一个maven仓库,所有在局域网中的开发人员都可以使用该仓库:
ps:私服中可以添加自己本地的仓库,也可以代理中央仓库中的包。毕竟对于一些网络比较差的环境,去中央仓库里面获取数据是一个很耗时的操作
优点1.节省自己的外部带宽:
2.加速构建过程
3.可以部署第三方构件
4.提高稳定性,增强控制
5.降低中央仓库的负荷
maven私服优势.png
如何搭建maven私服1.去官网下载 maven私服启动器 nexus:地址:https://www.sonatype.com/
2.下载后,配置环境变量后:在命令行输入:nexus /run
3.nexus启动成功后:在浏览器中输入:http://localhost:8081/启动界面如下:
2.nexus界面.png
点击右上角的sign in按钮:
输入用户名和密码:
用户名和密码系统会提示在哪个目录下
4.登录成功后:点击导航栏的设置按钮-->repository进入仓库列表
3.仓库搭建.png
4仓库.png
点击create repository创建一个新的本地局域网仓库:因为我们是为android项目创建的maven仓库选择maven2:
这里有三个maven2类型仓库:
*hosted*:本地局域网私服,像官方仓库一样,提供本地私库功能
*proxy*:提供代理其他仓库的功能,表示这个repository可以代理远程仓库,比如jcenter google 等远程中央仓库
*group*:组合多个仓库为一个地址使用
这里我们选择hosted仓库即可,大家可以根据自己需求选取
1.输入仓库名称
2.设置maven类型:
*release*:表示是一个该仓库存储的是一个release版本的第三方库
*snapshot*:表示存储的是一个不稳定第三方库,需要进程去私服或者中央仓库拉数据:
**** *** true (always/ daliy/ interval/ never) updatepolicy:表示更新的频率:
`always`:每次都需要拉去 ` daliy`:表示每天需要拉取 ` interval`:按分钟拉取 ` nerver`:和release版本一样,不需要重复拉取点击确定后就创建的一个maven私服:
点击该仓库就可以看到对应的url,这个url就是我们私服的地址。需要在项目中引用:
经过上面的步骤后,我们就搭建好了一个maven私服,局域网内用户都可以拉取使用
益莱储2021新年展望:未来既充满不确定性又有无限可能
华为Mate 30 Pro 5G元器件拆解曝光成本占售价的比重仅为31.6%
适用于TSN的智能可插拔板卡虹科RELY-TSN-LP-PCIe,帮你快速引入TSN技术
通过Oculus Quest实现基于本地空间的自定义多人大空间游戏
开始认怂?IEEE解除对华为员工编辑和同行评审活动的限制
如何使用Maven进行组件化发布(上)
实用的EOS和ESD保护实用方法
金升阳PV150-29Bxx系列产品的特点及应用
便携式可燃气体检测仪设计方案
嵌入式UART串口调试与嵌入式串口调试连接概述:调试接口与pc的交互程序的开发
新闻:马斯克不会向美提供中国客户数据 瑞萨火灾或加剧汽车芯片荒
为何PLC能在工业应用领域屹立不摇?
苹果造车计划迎来变数
高分辨率数字化光处理3D打印机问世 或将迎来量产
电源设计应用中的模拟齐纳二极管
不再是空谈,RISC-V进入高性能SoC实质性发展阶段
全志d1和全志d1-h的区别
医用雾化器是什么,有哪些用途
什么是滤波器,如何来判断滤波器的类型
单电池微控制器工作的优点