电子说
现如今已经不是以前单兵作战时代,越来越多的需求,促使我们项目去实现动态组件化开发。
这个时候组件化发布共享就显的尤为重要。
这篇文章我们就来讲解下如何使用Maven进行组件化发布
在讲解组件化发布之前,我们先来了解一些基础概念
pom:全名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 |
我们在开发中经常使用到第二/三方插件或者第二/三方库,就是存储在仓库中的
本地仓库 :存储在本地设备中的仓库以及远程仓库中下载保存的仓库,统称为本地仓库
私有仓库 :公司内部仓库,比如是有maven私服搭建的局域网仓库
中央仓库 :开源社区仓库,我们平时使用的第三方插件或者类库一般都存储在中央仓库,比如Maven Central
,阿里的国内镜像库等
1.maven库介绍.png
执行2
repositories
中声明的仓库顺序,在私有仓库和中央仓库查找对应的类库,找到则将类库版本信息下载到本地仓库,没找到则执行3
没找到对应的类库
’仓库执行顺序.awebp
项目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'}
Release
版本为啥还需要SNAPSHOT
?区别
:
使用场景
:
A和B共同开发,如果A修改了代码,
使用常规Release版本则需要每次都发布一个新版本,如果不小心忘记增加版本,B则无法收到更新后的版本,
造成代码不同步,后期会出现不可预料的bug。
使用SNAPSHOT只要A发布了版本,B在每次编译时就可以立即收到A的类库更新信息,可以实时同步代码。
SNAPSHOT以牺牲编译时间换取代码之间的立即可见度
,缺点就是在网络较差的情况下代码编译时间可能常常比较慢。
模块级: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
任务
如果执行成功:则会在对应的本地目录下找到类库信息:
maven
私服其实就是在部门·局域网·中设置一个maven
仓库,所有在局域网中的开发人员都可以使用该仓库:
PS:私服中可以添加自己本地的仓库,也可以代理中央仓库
中的包。毕竟对于一些网络比较差的环境,去中央仓库里面获取数据是一个很耗时的操作
1.节省自己的外部带宽:
2.加速构建过程
3.可以部署第三方构件
4.提高稳定性,增强控制
5.降低中央仓库的负荷
maven私服优势.png
官网下载
maven私服启动器 nexus
:环境变量
后:在命令行输入:nexus /run
http://localhost:8081/
2.nexus界面.png
点击右上角的sign in
按钮:
输入用户名和密码
:
用户名和密码系统会提示在哪个目录下
3.仓库搭建.png
4仓库.png
create Repository
创建一个新的本地局域网仓库:因为我们是为Android项目创建的maven仓库选择maven2:
这里有三个maven2类型仓库:
*hosted*
:本地局域网私服,像官方仓库一样,提供本地私库功能
*proxy*
:提供代理其他仓库的功能,表示这个repository可以代理远程仓库,比如jcenter
google
等远程中央仓库
*group*
:组合多个仓库为一个地址使用
这里我们选择
hosted
仓库即可,大家可以根据自己需求选取
1.输入仓库名称
2.设置maven类型:
*release*
:表示是一个该仓库存储的是一个release版本的第三方库
*snapshot*
:表示存储的是一个不稳定第三方库,需要进程去私服或者中央仓库拉数据:
****class="hljs-name"id>
***class="hljs-name"url>
trueclass="hljs-name"enabled>
(always/ daliy/ interval/ never)class="hljs-name"updatePolicy>
class="hljs-name"snapshot>
class="hljs-name"repository>
class="hljs-name"repository>
updatePolicy
:表示更新的频率:
`always`:每次都需要拉去 ` daliy`:表示每天需要拉取 ` interval`:按分钟拉取 ` nerver`:和release版本一样,不需要重复拉取
点击确定后就创建的一个maven私服:
点击该仓库就可以看到对应的url,这个url就是我们私服的地址。需要在项目中引用:
经过上面的步骤后,我们就搭建好了一个maven
私服,局域网内
用户都可以拉取使用
全部0条评论
快来发表一下你的评论吧 !