Maven实现组件化方案
1.有过组件化开发经历的童鞋,一定有一个很头大的问题:不同项目,依赖相同模块的时候,当这个共同的模块迭代需要的时候,我们总是需要手动移植好多次,而且容易出错。这无形中增加了工作量和出错率。因此,有没有一种可以共享的方式,来解决这种问题,看来是首当其冲
2.我曾今想过,可以通过
- 版本控制仓库—— 分别管理具体的模块和组件
- maven仓库版本控制仓库协同——代码可以托管到托管仓库,模块可以以aar,jar的形式放到maven仓库,通过maven或者gradle远程依赖
Maven方案(本地maven配合自己maven服务器使用,如果使用第三方maven直接跳到2)
1.搭建本地maven仓库:(通过gradle 的 uploadArchives task 完成)
- gradle申明
apply plugin: 'maven'//maven插件
uploadArchives{//生成仓库的任务
repositories.mavenDeployer{
// 配置本地仓库路径,项目根目录下的repository目录中
repository(url: uri('../repository'))
pom.groupId = "com.zlj.groupId"// 唯一标识(通常为模块包名,也可以任意)
pom.artifactId = "vViewPager" // 项目名称(通常为类库模块名称,也可以任意)
pom.version = "1.0.0" // 版本号
}
}
- 依赖方式
1.申明仓库地址
allprojects {
repositories {
google()
jcenter()
//申明本地Maven仓库地址
maven {
url 'file:D:\\Android\\workePlace\\VViewPager_master\\repository'
}
}
}
2.依赖
implementation'com.zlj.groupId:vViewPager:1.0.0' //groupId:artifactId:version
2.远程maven
- 自己搭建maven服务器
- jitpack/Bintary ,第三方maven服务器;
1.这里只写了一下,bintary使用方法
2. 使用bintray-release 插件上传 集成地址
apply plugin: 'com.android.library'
apply plugin: 'maven'
apply plugin: 'com.novoda.bintray-release'
publish {
userOrg = 'zljgroupid' //bintray账户下某个组织id
groupId = 'fr.castorflex.android.vViewPager' //maven仓库下库的包名,一般为模块包名(Version control *)
artifactId = 'vViewPager' //项目名称(Name*)
publishVersion = '1.0.0' //版本号
desc = '竖直viewPager' //项目介绍,可以不写
website = '' //项目主页,可以不写
}
-
登录bintary 官网
-
创建group,生成groupId
-
创建仓库(Repository)
-
创建要上传的项目(addNewPackage)
-
androidStudio——terminal——执行上传命令 (uId pId 替换成自己的 uId----->bintary的账号Id pId----自己的Key)
gradlew clean build bintrayUpload -PbintrayUser=uId -PbintrayKey=pId -PdryRun=false
- 上传成功以后,远程依赖
1.
allprojects {
repositories {
//项目gradle 中添加自己的maven库地址
maven {url "https://dl.bintray.com/zljgroupid/maven"}
}
}
2.依赖项目
dependencies {
implementation'fr.castorflex.android.vViewPager:vViewPager:1.0.0'
}