前言:

最近我们老大组织了我们软件团队开了一个小会,说了一些存在的问题,平时在技术上的交流还是比较少的,尤其是在不同的项目之间的开发人员,然而经过这次会议我突然发现,我的缺陷不仅是在基础的能力上,还有一点就是对新的技术,编程思想知之甚少,就用low来形容吧。所以即使再忙也不能把自己陷在敲代码的体力活中,有时候真得跳出来多看看,了解一些主流的技术,使用一些工具,既节约时间,而且可以写出一份优秀的代码。

问题:

  • 将Android项目从Eclipse转到AndroidStudio后,我们所有的依赖,jar,aar包等必须要保持一致,不然就会冲突构建失败。
  • 如果依赖的module太多,构建一个project时每个依赖的module都需要构建,比较费时,然后我也不想去copy已经编译好的aar,因为有时候需要修改依赖的module,需要打开源码,修改后需要上传新版本的aar等等。

方案:

参考了大神们Gradle统一依赖的管理方式,并再次加工,将所有的依赖放到一个config.gradle的配置文件里边。同时写好依赖maven私库和源码的module的配置,这样就可以在源码和aar之间自由切换。

准备工作:使用Nexus Repository搭建maven私服

搭建maven私服很简单,可以参考 Android 项目部署之Nexus私服搭建和应用,公司已经搭好了maven私库,但是毕竟是公共的,不是那么自由,所以我就搭在本地了。下面是主要的一些配置。

Maven的配置文件:D:\xxx\Maven\apache-maven-3.3.9\conf\settings.xml

  <localRepository>E:\***\repository</localRepository> //本地仓库地址,先行创建好文件夹//nexus服务<server>     <id>my-nexus-releases</id>     <username>admin</username>     <password>admin123</password>     </server>     <server>     <id>my-nexus-snapshot</id>     <username>admin</username>     <password>admin123</password>     </server>  //镜像<mirror>        <id>nexus</id>         <url>http://localhost:8081/nexus/content/groups/public/</url>        <mirrorOf>*</mirrorOf>        </mirror>  //nexus仓库配置  <profile><id>nexusProfile</id><repositories><repository><id>nexus</id><name>Nexus Repository</name><url>http://xxx.xx.xx.xx:8081/nexus/content/groups/public/</url><layout>default</layout><releases> <enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</profile>//激活<activeProfiles><activeProfile>nexusProfile</activeProfile></activeProfiles>

演示项目:

假设app为主工程,依赖的lib3,lib2,而lib2依赖了lib1。

settings.gradle 配置

include ':lib1'
include ':lib2'
include ':lib3'
include ':app'

maven私库配置,根目录下的build.gradle中的配置

apply from:"config.gradle" //配置统一依赖管理文件buildscript {repositories {jcenter()     }dependencies {classpath 'com.android.tools.build:gradle:1.3.0'}
}allprojects {repositories {jcenter()      maven { url MAVEN_URL }//配置maven私服}
}

全局变量,根目录下的gradle.properties

MAVEN_URL= http://xxx.xx.xx.xx:8081/nexus/content/repositories
MAVEN_SNAPSHOT_URL = http://xxx.xx.xx.xx:8081/nexus/content/repositories/thirdparty-snapshot/
#对应maven的groupId值
GROUP=group
#登录nexus oss的用户名
NEXUS_USERNAME=admin
#登录nexus oss的密码
NEXUS_PASSWORD=admin123
# groupid
GROUP_ID = group
# type
TYPE = aar
# description
DESCRIPTION = dependences lib

`

app的build.gradle

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile rootProject.ext.dependencies["lib2"]compile rootProject.ext.dependencies["lib3"]
}

lib2的build.gradle

dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile rootProject.ext.dependencies["lib1"]
}

自动配置上传aar到maven私库的配置

uploadArchives {
configuration = configurations.archives
repositories {mavenDeployer {snapshotRepository(url: MAVEN_SNAPSHOT_URL) {authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)}repository(url: MAVEN_URL) {authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)}pom.project {version rootProject.ext.uploadArchives["lib1"]//版本号artifactId 'lib1'groupId GROUP_IDpackaging TYPEdescription DESCRIPTION}}
}
}

统一依赖config.gradle

// 依赖全局控制  源码工程和maven私库的aar自由控制,比如现在 lib2依赖lib1的aar 只要注释下方的源码依赖,打开上面的maven依赖即可dependencies = ["lib1"      : 'group:lib1:1.0.0+',//"lib2"        : 'group:lib2:1.0.0+',//"lib3"        : 'group:lib3:1.0.0+',// "lib1" : project(':lib1'),//lib2(我在后边注明依赖lib1的工程lib2,依赖关系一目了然)"lib2" : project(':lib2'),//app"lib3" : project(':lib3'),//app]//上传时修改aar版本号uploadArchives = [lib1                 : "1.0.0",lib1                 : "1.0.0",lib1                 : "1.0.0"]

注意:

  • 这么搞有个问题,如果一个lib2依赖的是lib1,那么此时构建生成的aar,会将依赖lib1的aar版本打包一起上传到maven,所以我在版本号后边增加了“+”号,永远保持依赖最新的。

  • 如果lib1打开了源码,那么依赖了lib1的module也要打开源码,逐层上推。

请教:

我将所有的依赖都放到config.gradle中,一是为了方便管理,二是希望能够实现每个module可以在源码和aar之间自由的切换,但是第二点并没有达到最理想的效果,求大神们给出更好的方案。

结语:

这篇博客还是上周写了一大半,中间有些事情耽搁了,一直拖到现在。今晚和一个老同学聊天,我问道她一个问题:站在女生的角度来说,你希望找的男朋友是事业有成的呢?还是愿意找个一无所有的一起创造的呢?她的回答是:其实重点是会照顾人,对女朋友好,当然事业有成最好咯,但往往很少啦,如果不是,至少要是个潜力股,还有,如果真的在乎那个女孩,就算她愿意陪你吃苦,你也是不愿意她为你吃苦的。我觉得说的很真实,所以,还是加油吧。现在办公室就我一个人,打开音响可以放心的把音量调高一点,这样算是给自己一点放松吧。这段一直关注stormzhang的公众号AndroidDeveloper,里边的一篇:我到底有多么拼命,的确和他比确实弱爆了。或许就如stormzhang所说的,作为一个初级程序员,我的生活就是工作。前段曾为发一个版本搞了个通宵,然而发现最近有些急躁或者疲倦了,当然我也会及时的调整自己,我觉得保持持续的激情就是我们所说的坚持吧。这段老说自己很忙,但是我真的很忙吗?我只是希望忙的时候多注意一些方法,要有效率,要有成果。

AndroidStudio使用进阶二:搭建自己的maven私服,并使用Gradle统一依赖管理相关推荐

  1. Nexus搭建Maven私服全攻略一:认识Nexus与索引

    一.Nexus简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则,私服请求外 ...

  2. Maven 私服搭建

    由于公司研发环境物理隔绝,所以自己搭建了一个 maven 私服,以下是自己搭建私服过程中的一个记录. 1.准备Maven私服相关文件 1.1 从 sonatype 官网 下载 nexus 安装包 1. ...

  3. 搭建maven私服发布项目并从私服下载jar包

    1 私服说明 maven仓库分为本地仓库和远程仓库,而远程仓库又分为maven中央仓库.其他远程仓库和私服(私有服务器).其中,中央仓库是由maven官方提供的,而私服就需要我们自己搭建了. mave ...

  4. Java技术:项目构建工具Maven最佳替代者gradle介绍

    Maven作为一款非常流行的项目构建工具.基本上是每个Java程序员必备的工具,当然Maven有一些地方不足之处: 1. Maven的配置文件是XML格式的,如果你的项目工程依赖的包很多,那么XML文 ...

  5. maven 私服 nexus3 配置,踩坑 , Ready to Connet

    maven 私服 nexus3 配置,使用,踩坑(欢迎留言提意见,共同进步) 继续上文docker-compose 搭建 maven 私服 nexus3 笔记 新增一个阿里的仓库 类型 起个名字,配置 ...

  6. Maven 依赖管理(依赖范围/排除/原则)

    Maven 一个核心的特性就是依赖管理.当我们处理一个或多模块的项目时,模块间的依赖关系就变得非常复杂,管理也变得很困难.针对此种情形,Maven 提供了一种高度控制的方法. 一.依赖配置 依赖是 M ...

  7. Maven的依赖管理

    Maven的一个核心特性就是依赖管理.当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成一项困难的任务.Maven展示出了它对处理这种情形的高度控制. 传统的WEB项目中,我们必须将 ...

  8. AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(二)

    AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(二) AndroidStudio如何打包生成realease版本的arr包 ...

  9. AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(一)

    AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(一) 背景: 公司之前在eclipse上做开发,写了很多library库供 ...

最新文章

  1. php跨域访问java,案例:PHP Ajax 跨域最佳解决方案
  2. 成功人士的十个故事- -
  3. python怎么检查错误-错误处理
  4. php url怎么加前缀,php – 在Laravel 5中为现有URL添加前缀
  5. springboot配置连接rds_java – 在AWS-EC2上运行的SpringBoot应用程序无法连接到MySQL AWS-RDS数据库...
  6. python达梦数据库_Python 编程可以访问达梦数据吗?
  7. Workbox.routing v3.x 中文版
  8. 我国高性能计算机发展,中国高性能计算机发展水平与趋势
  9. python selenium iframe怎么定位_python+selenium四:iframe查看、定位、切换
  10. QML笔记-KeyNavigation的使用(2种例子)
  11. 编程之美——题目2 : 回文字符序列
  12. 修改Chrome的User Agent的方法 真实有效
  13. 数据库防火墙、数据库加密、数据库脱敏真的可用吗?
  14. php 怎么设置cookie,php中如何设置cookie
  15. Scaling Your Node.js Apps 免积分下载
  16. linux下安装mariadb
  17. 移动端性能测试必备工具PerfDog性能狗
  18. python实现视频播放器_对目前的视频播放器不满意?教你用Python做一个视频播放器...
  19. 09款苹果笔记本图片_简单分辨二手苹果笔记本(MacBook Pro)年份的方法
  20. Java开发环境配置图解

热门文章

  1. OverFeat 部分翻译+总结
  2. 智慧城市的威胁——从《看门狗》看物联网风险
  3. Hessian 矩阵(海塞矩阵)
  4. 论文阅读Domain Adaptation of DPM models
  5. Spring Boot+Vue前后端分离商城实战(二)Spring Boot 项目构建及使用
  6. Linux-GNU make
  7. 消防电力监控设备静电整改案例—优恩半导体
  8. android最卡机型,安卓高端机用两年卡吗
  9. 今年上半年,我国公路建设总体形势持续向好
  10. WAVECOM AT命令常见问题