建立企业内部mavenserver并使用Android Studio公布公共项目
由于Android Studio使用了Gradle构建工具,在library依赖的处理上是将被依赖的library作为一个module引入(拥有一份完整的library拷贝),而Eclipse的ADT则是直接将library作为外部项目依赖链接进来,两者各有各的优缺点。Android Studio的优点是能时刻保持项目的完整性,每个项目都包括了整个项目所须要的一切东西,当你把项目共享给别人的时候就不会由于落下某个library而导致别人无法正常打开你的项目。缺点则是多个项目都依赖同一个library,每个项目都有自己一份library代码拷贝,当这个library的代码须要更新的时候。每个项目中的library代码都须要更新一遍。而Eclipse的library依赖,仅仅是做了一个library链接,多个项目能够链接到同一个library,优点是library须要改动的时候仅仅须要改动一处代码,缺点时与他人共享项目的时候可能会落下library忘记共享。
一般一个公司长期开发累积下来。都会总结出一套自己的SDK或者工具供自己的产品使用。假设使用Android Studio开发,一旦自己的SDK须要更新难免就会遇到前面说的问题。好在Android Studio除了library module依赖这样的方法之外,还提供了本地仓库或者(server)远程仓库依赖,通过Gradle工具自己主动从仓库中获取并管理项目所须要的library。
Gradle支持maven仓库。早期的Android Studio直接使用的就是maven中央仓库,尽管正式版之后改用jcenter。可是依旧能够混用自己定义的maven仓库。
总体上的解决思路分三个步骤:
第一,就是在自己公司内部的server上搭建一个maven仓库
第二。将自己公司的公共类库公布到公司内部server的maven仓库上
第三,在公司其他项目中配置公司内部servermaven仓库地址。并引用所需的library,Gradle会自己主动从servermaven仓库中获取
1、在自己公司内部server上搭建maven仓库
server上的maven仓库能够使用Sonatype nexus oss来搭建。sonatype nexus oss 是一个maven仓库管理工具,并提供了web控制台。部署和使用都非常方便。
1.1 下载sonatype nexus oss
将sonatype nexus oss下载到公司内部server上,下载地址:http://www.sonatype.org/nexus/go
1.2 安装并执行sonatype nexus oss
首先确认server上是否已经安装JDK,nexus oss的执行须要JDK7或者JDK8。假设没有安装JDK,请先安装JDK。
下载下来的nexus oss是一个zip或者tar.gz压缩包,须要将其解压。你能够将其解压到不论什么位置。nexus oss的执行对其所在位置没有什么特殊要求。解压后会看到两个文件夹,一个是nexus-x.xx.x-xx。一个sonatype-work。当中nexus-x.xx.x-xx是nexus oss的主文件夹。全部执行程序和配置文件都在里面。
sonatype-work是nexus-oss的数据文件夹,nexus-oss执行过程的maven仓库数据都在这里面。
进入nexus-x.xx.-x-xx/bin文件夹。window平台的server直接执行nexus.bat脚本就能够了。以下具体讲下linux平台的安装和执行。
nexus oss官方建议将nexus-x.xx.x-xx安装到/usr/local文件夹下,并做个/usr/local/nexus链接指向nexus-x.xx.x-xx文件夹。方便以后nexus oss版本号升级。方法例如以下
$ sudo cp nexus-x.xx.x-xx-bundle.tar.gz /usr/local
$ cd /usr/local
$ sudo tar xvzf nexus-x.xx.x-xx-bundle.tar.gz
$ sudo ln -s nexus-x.xx.x-xx nexus
假设你下载的是zip压缩包,则使用sudo unzip nexus-x.xx.x-xx-bundle.zip命令解压。
为了方便以后使用,能够加入$NEXUS_HOME环境变量指向/usr/local/nexus。另外,默认配置sonatype-work文件夹与nexus-x.xx.x-xx在同一个文件夹下,假设你想讲sonatype-work迁移到其他指定路径,能够改动nexus-x.xx.x-xx/conf/nexus.properties配置文件里的nexus-work变量值。
完毕之后,执行nexus oss仅仅须要执行nexus-x.xx.x-xx/bin/nexus脚本。參数能够为console或者start。
console会在控制台打印出执行日志。假设有配置NEXUS_HOME环境变量,就能够在不论什么地方执行以下语句:
$NEXUS_HOME/bin/nexus start
1.3 配置sonatype nexus oss
执行成功之后,在浏览器打开http://server地址:8081/nexus就能够看到nexus oss的控制面板。
点击右上角login登录。默认账号password为admin/admin123。登录后能够看到下面界面:
左边是功能面板,能够在Repositories里面查看全部的maven仓库,在User里面进行用户管理(改动password什么的)。点击Repositories,查看maven仓库:
能够看到nexus oss默认已经建好了几个仓库,每一个仓库都有自己的一些属性。
第一个重要属性是type仓库类型。
主要有group、hosted、proxy、virtual四种类型。不同类型的仓库有不用的作用和工作模式。一般仅仅须要关注group、hosted、proxy三种类型。因为nexus oss上面能够有多个maven仓库,可是maven这个工具要求使用groupId:artifactId:version这三个參数就能唯一确定一个项目。因此nexus oss使用group类型的仓库来决定nexus oss上各个maven仓库的优先级,以解决不同maven拥有同样项目的冲突。
proxy类型的仓库事实上仅仅是个代理,用于代理其它server上的maven仓库。hosted类型是nexus
oss自己所在server本地的maven仓库,也是我们这次主要使用的仓库类型。
Repository Path是仓库的地址,把自己的项目公布到maven和引用maven仓库中项目的时候须要用到。
选择一个仓库后,能够在以下窗体中看到这个仓库的详细信息。当中Configuration标签页中能够对仓库进行设置。
我们的目的是要将我们自己的项目公布到我们自己的server上去,因此我们要选择hosted类型的仓库,以免公司内部的代码外泄出去(当然server也得是内网的server,公网能訪问到的server,公布上去的代码也有一定的风险)。
对于我们要使用的hosted类型的仓库,重点要看的是里面的Repository Policy仓库存储协议。有release和snapshot两种。release表示发行版,snapshot表示快照版本号。另一个Deployment Policy部署协议,有Allow Redeploy(同意部署)、Disable
Redeploy(不同意部署)、Read Only(仅仅读)三种模式。仅仅有在Allow Redeploy模式下,我们才有权限能够将我们的项目公布到这个项目中。nexus oss默认已经建立了Releases和snapshots两个hosted仓库,我们检查一下配置就能够直接拿来用。当然你也能够自己建立hosted仓库。
2、公布公共类库到servermaven仓库
编辑须要公布的公共类库的module的build.gradle脚本,在末尾加入以下配置:
apply plugin: 'maven'
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: RELEASE_REPOSITORY_URL) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
}
}
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
}
相同在这个module下加入gradle.properties文件,文件内容例如以下:
GROUP=相应maven的groupId值,假设名字中包括SNAPSHOT字符,项目将会公布到snapshots仓库。没有则公布到releases仓库
VERSION_NAME=相应maven的version值
POM_ARTIFACT_ID=相应maven的artifactId值 SNAPSHOT_REPOSITORY_URL=前面配置的snapshots仓库地址
RELEASE_REPOSITORY_URL=前面配置的releases仓库地址 NEXUS_USERNAME=登录nexus oss的username
NEXUS_PASSWORD=登录nexus oss的password
改动完之后,在Android Studio右面的Gradle面板中找到相应的module,在这个module以下就能看到uploadArchive这个task:
双击执行这个task。项目就公布到nexus oss相应的maven仓库中,在日志中能够看到类似这种信息:
看到BUILD SUCCESSFUL表示公布成功,回过头来看nexus oss面板上的仓库,找到你公布上去的仓库。应该就能找到你的项目。比方我公布的项目:
3、在其他项目用引用我们公布的类库
方法非常easy,在须要加入依赖的module的build.gradle文件里找到dependencies对象,在当中加入我们自己mavenserver的url地址,然后依照前面我们公布项目时配置文件里的gradleId:archiveId:version方式应用就能够了,比方我自己的仓库和项目:
加入后刷新同步下gradle,项目依赖就自己主动处理了。公共类库有改动,仅仅须要改动公共类库并改动下version版本,然后再公布一次代码到maven上去。
其他项目仅仅须要改动下gradle脚本中的版本。代码就都自己主动更新上了。
建立企业内部mavenserver并使用Android Studio公布公共项目的更多相关文章
- 在Android Studio中创建项目和模拟器
北京电子科技学院 实 验 报 告 课程:移动平台应用开发实践 班级:201592 姓名:杨凤 学号:20159213 成绩:___________ 指导老师:娄嘉 ...
- Android studio导入eclipse项目且不改变目录结构
Android studio的安装与配置论坛当中已经有很多在此就不在细说了,现在开始说下如何在Android studio当中导入eclipse的项目且不改变其目录结构和配置,让使用eclipse的同 ...
- Android Studio导入Eclipse项目和一些常见的问题
Android Studio版本 Eclipse项目工程:一个主工程,一个Emojicon依赖库. 有两种方式导入Eclipse工程: 1.兼容Eclipse 2.全新的Android Gradle ...
- Android Studio中新建项目时Your android sdk is out of date or is missing templates的解决办法
在Android Studio中新建项目时出现了以下问题:Your android sdk is out of date or is missing templates. Please ensure ...
- Android studio多个项目之间怎么实现快速切换?
Android studio多个项目之间怎么实现快速切换?Android studio中打开的项目太多了,想切换到一个项目很麻烦,怎么才能快速切换到另一个项目中呢?请看下文详细介绍 在对Android ...
- Android Studio创建库项目及引用
Android Studio创建库项目其实创建的是在主项目下创建Module模块,这个Module模块创建的时候选择库项目模式. 为什么要这样处理呢?因为在Android Studio中一个WorkS ...
- 1.1、Android Studio创建一个项目
Android Studio中的项目包含一个或多个模块.本节帮助你创建一个新的项目. 创建一个新的项目 如果你之前没有打开项目,Android Studio显示欢迎页面,通过点击Start a New ...
- android studio git 将项目分享到github,推送到其他平台 码云 等。
android studio git 将项目分享到github,推送到其他平台 码云 等. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E- ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
随机推荐
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...
- (转)ThinkPHP find方法 查询一条数据记录
find() ThinkPHP find() 方法是和 select() 用法类似的一个方法,不同之处 find() 查询出来的始终只有一条数据,即系统自动加上了 LIMIT 1 限制. 当确认查询的 ...
- Linux svn一次增加多个文件并批量上传
命令行下操作svn没有使用界面形式的TortoiseSVN直观,但是不管怎样,命令行下操作svn还是有它的有点,如果你碰到一次需要svn add许多个文件怎么办?下面的命令可以帮助你解决这个问题 一次 ...
- MSChart使用之动态生成多个多行ChartArea
前台代码: <asp:Chart ID=" > <Titles> <asp:Title Name="Title1" runat=" ...
- 手把手教你DIY一个春运迁徙图(一)
换了新工作,也确定了我未来数据可视化的发展方向.新年第一篇博客,又逢春运,这篇技术文章就来交给大家如何做一个酷炫的迁徙图(支持移动哦).(求star 代码点这里) 迁徙图的制作思路分为静态的元素和变换 ...
- mybatis审查要点
1.where条件遗漏情况 <select id="findActiveBlogLike" resultType="Blog"> SELECT * ...
- 跟我学android-Android应用结构分析(四)
自动生成的R.java文件说明 public final class R { public static final class attr { } public static final class ...
- 如果使用的是orm,是否还需要关系索引
简而言之:是的,仍然需要理解索引,即使是使用对象关系映射(ORM)工具. ORM工具能够产生符合逻辑的,合法的查询(多数的时候),除非只是生成非常基本的查询(例如仅是根据主键查询的),否则它很难生成适 ...
- C++ Primer 5th 第13章 拷贝控制
当一个对象的引用或者指针离开作用域时,析构函数不会执行. 构造函数有初始化部分(初始化列表)和函数体. 析构函数有析构部分和函数,但析构函数的析构部分是隐式的.
- Selenium 下载URL
http://mvnrepository.com/artifact/org.seleniumhq.selenium