一、场景

  ① 公司中有多个项目,多人开发,开发中的某一模块需要被其他几个项目的模块所依赖,最简单粗暴的方式就是打包成aar或者jar文件逐个拷贝到libs下进行依赖,可是这种方式太过于麻烦,而且需要每次都得更新代码。如果有多个这样的库就更麻烦了。所以根据项目规模和需求,为了加快团队开发效率,搭建一个Maven私服就很有必要了。

二、搭建

  通过Rexus可以快速方便的搭建一个Maven私服,本篇就讲述通过Rexus搭建Maven私服并上传库文件,以及升级库文件。要开始搭建,首先要下载Rexus:

  官网地址 : https://www.sonatype.com/download-oss-sonatype

  网盘链接:    https://pan.baidu.com/s/1A7RW_PEh4KuB1w4xpfaaYQ 密码: uyev  (Window x64)

  安装步骤:(不同版本安装的方式会有区别,这个是针对 3.x版本的)

  ① 下载好的压缩包,进行减压,以管理身份运行cmd,进入到减压后nexus.exe所在目录,键入nexus.exe /install 安装Nexus服务。

    

  ② 打开浏览器,打开地址 http://localhost:8081/ ,看到下图界面则表示服务启动成功。如果没有启动成功,就需要查看服务是否正常启动。

  如果需要更改Nexus的配置,可以在这个文件中更改:

          

  ③ 启动成功后,需要登陆账号,默认账号 / 密码:  admin  /  admin123 , 登陆成功以后就要创建我们的maven库,去放置我们的库文件。

  ④ 登陆成功,创建 repository

  

  1)创建过程中需要选择创建的类型,下面看一下类型区别:

仓库类型 说明
 proxy  远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用
hosted 宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。
group 仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了

  根据目前的需求,我们只是要把自己的一些构件放到私库里,所以选择的类型是hosted类型。

  2) 创建过程中需要必须操作的一点是:必须更改disable redeploy   ——>   allow redeploy

  

  3) Artifact type  : release \ snapshot

     release :  构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取

    snapshot:会优先去远程仓库中查看是否有最新,如果有则下载下来使用,即使本地仓库中已经有了。

  到这里nexus搭建maven私服已经基本完毕,剩下的就是要把我们的 library库文件放置到我们已经建好的私服里,并添加依赖使用。

三、使用私有仓库

  上面我们创建了reader仓库,仓库地址为 http://localhost:8081/repository/reader。如果把 nexus 安装在了局域网服务器,基本类似,只是仓库地址中的 localhost 改为局域网服务器 ip 。

  ① 上传库文件

  比如我们Android项目中的一个library公共组件,要上传到私库上供其他项目依赖使用。我们需要做的配置:

  1. 在该library项目的gradle.properties添加以下配置:

# maven local config
maven_local_url=http://192.168.142.26:8081/repository/reader/
maven_local_username=admin
maven_local_password=admin123
#common utils
maven_pom_version=1.0.0
maven_pom_groupid=com.dboy
maven_pom_artifactId=reader
maven_pom_packaging=aar
maven_pom_description=dboy reader
# maven_pom_archives_file=libs/CommonUtils.jar 上传某一个jar

  说明 :

  • maven_local_url maven仓库中相应repository的地址
  • maven_local_username 上传类库到仓库的用户名
  • maven_local_password 上传类库到仓库的密码
  • maven_pom_version 要上传的类库的版本号
  • maven_pom_groupid 类库的分组标记,一般使用公司名或包名即可
  • maven_pom_artifactId 类库的名称
  • maven_pom_packaging 类库的格式可以支持 jar ,aar , so 等
  • maven_pom_description 类库描述
  • maven_pom_archives_file 类库文件在项目中的位置(相对于 build.gradle)

  2. 在相应类库所在的 module 的 build.gradle 增加上传类库的 task

uploadArchives {
repositories {
mavenDeployer {
repository(url: maven_local_url) {
authentication(userName: maven_local_username, password: maven_local_password)
}
pom.project {
version maven_pom_version
artifactId maven_pom_artifactId
groupId maven_pom_groupid
packaging maven_pom_packaging
description maven_pom_description
}
}
}
}
/* artifacts {
archives file(maven_pom_archives_file)
} */

  说明 :

  • artifacts 中可以指定要上传的 jar 或 aar 的路径,为统一配置都由 gradle.properties 的属性 maven_pom_archives_file 指定
  • 如果只需要上传项目编译时产生的 aar,artifacts 可以省略,因为 artifacts 默认就包含了编译产生的 aar 或 apk

  3. 运行上传类库的 task 即可把相应类库上传到仓库 reader   ——>  gradle uploadArchives ,双击运行

  

  上传成功应该就可以看到上传的类库了。

  

  4. 使用上传的类库

  在需要依赖上传类库的项目build.gradle文件添加:

allprojects {
repositories {
jcenter()
maven { url 'http://192.168.142.26:8081/repository/reader/' }
}
}

  在module的build.gradle中就可以像其他的第三方库一样使用:

compile 'com.dboy:reader:1.0.0'

  这样我们就可以使用了,很开心伐。但是这个类库是我们自己开发,肯定需要不断去更新,那也就必须要更新私服里的代码,所以接下来说一下更新.

四、更新私有仓库

  如果类库需要更新版本,基本操作同上。

  比如类库 reader有了新版本为 2.0.0 ,修改 gradle.properties 配置如下(只需要修改版本号,其他不用修改)

maven_pom_version=2.0.0

  然后执行 gradle uploadArchives 任务即可

  类库更新版本后,不更改 gradle 配置文件自动获取最新类库,添加依赖的方式需要这样添加:(每次都从maven获取最新代码)

dependencies {
compile 'com.dboy:reader:1.+'
}

  或者

dependencies {
compile 'com.dboy:reader:+'
}

五、参考

  android 搭建maven私服管理类库

六、总结

  多个项目使用同一个library,打包成aar ,以前不怕麻烦的就都拷贝了。(这种方式可以看这篇)结果面试的时候,被问到为什么不搭建一个私服呢。呵,被嫌弃了。不能怕麻烦的勤快。

  

Anroid 搭建Maven私服(Android Studio)的更多相关文章

  1. Gradle系列之从零搭建Maven私服库

    原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇文章学习了 Gradle 相关知识,Gradle 系列文章如下: Gradle系列之初识Gradle Gradle之Groovy基础篇 ...

  2. 搭建Maven私服

    最近从SVN下载的代码,在本地构建时出现了诸多问题,部分依赖下载超时,就想起在局域网搭建Maven私服,废话不说了,在测试服务器上建的已经成功,就随便找台机子再练习一遍顺道写个日志.1.前往http: ...

  3. Maven学习 (四) 使用Nexus搭建Maven私服

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  4. Maven-004-使用 Nexus 搭建 maven 私服

    从去年至今,自己一直在学习自动化测试工具,想利用自动化工具尽可能的将重复的.关键的.耗时耗力的工作实现自动化,减轻日常测试工作,提升测试效率.在学习的过程中,将 maven 作为了项目开发管理工具,进 ...

  5. Ubuntu server下搭建Maven私服Nexus

    Ubuntu server下搭建Maven私服Nexus Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用. 1.下载 通过root用户进去Ubuntu ...

  6. Maven使用笔记(五)Sonatype Nexus 搭建Maven 私服

    1. 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地, 而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载 ...

  7. Maven——使用Nexus搭建Maven私服

    原文:http://www.cnblogs.com/xdp-gacl/p/4068967.html Maven学习总结(九)--使用Nexus搭建Maven私服 一.搭建nexus私服的目的 为什么要 ...

  8. Maven学习 使用Nexus搭建Maven私服(转)

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  9. 搭建Maven私服那点事

    摘要:本文主要介绍在CentOS7.1下使用nexus3.6.0搭建maven私服,以及maven私服的使用(将自己的Maven项目指定到私服地址.将第三方项目jar上传到私服供其他项目组使用) 一. ...

随机推荐

  1. java内存泄漏与内存溢出

    https://www.cnblogs.com/panxuejun/p/5883044.html 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out o ...

  2. How to click on a point on an HTML5 canvas in Python selenium webdriver

    https://stackoverflow.com/questions/29624949/how-to-click-on-a-point-on-an-html5-canvas-in-python-se ...

  3. Docker学习笔记之常用的 Docker Compose 配置项

    0x00 概述 与 Dockerfile 一样,编写 Docker Compose 的配置文件是掌握和使用好 Docker Compose 的前提.编写 Docker Compose 配置文件,其本质 ...

  4. 那些不错的 [ Html5 + CSS3 + Canvas ] 效果!

    apng制作工具:http://isparta.github.io/how.html apng制作文章:http://isux.tencent.com/introduction-of-apng.htm ...

  5. spring使用@Autowired为抽象父类注入依赖

    有时候为了管理或者避免不一致性,希望具体服务统一继承抽象父类,同时使用@Autowired为抽象父类注入依赖.搜了了网上,有些解决方法实现实在不敢恭维,靠子类去注入依赖,那还有什么意义,如下: 父类: ...

  6. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html   v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客 ...

  7. 20165310 NetSec Week4 Exp2 后门原理与实践

    20165310 NetSec Exp2后门原理与实践 一.基础问题 例举你能想到的一个后门进入到你系统中的可能方式? 网页木马等访问网页导致 下载非官方源软件 随意下载邮件中不明程序等 例举你知道的 ...

  8. Loader

    1.定义 可以把Loader当做一个占位符,即占有屏幕的某一个空间,当加载了组件之后,这个空间就能显示相应的图形了.所以可以给Loader设置anchor布局 2.加载组件 source:加载QML文 ...

  9. Flask学习【第2篇】:Flask基础

    知识点回顾 flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 实例化Flask对象,里面是有参数的 app = Flask(__name__,template_ ...

  10. POJ1741 Tree(树分治——点分治)题解

    题意:给一棵树,问你最多能找到几个组合(u,v),使得两点距离不超过k. 思路:点分治,复杂度O(nlogn*logn).看了半天还是有点模糊. 显然,所有满足要求的组合,连接这两个点,他们必然经过他 ...