Android Nexus私有库搭建

来源:互联网 发布:程序员的数学百度网盘 编辑:程序博客网 时间:2024/06/05 13:28

相信很多人都发现了,github上很多优秀的开源项目都是以一种组件化的方式来写的,都是直接通过gradle的compile把一个jar包或者aar包引用过来供项目里的代码来使用的。这其实就是把你写好的一个模块放到私有库上,然后直接引用的道理。那么肯定会有很多人有这样的疑惑:AndroidStudio里不是有一个module的概念吗,module不仅可以在其他项目里复用,我只要import一下就可以了,而且还方便修改,万一哪天需求突然变了,那修改起来不是很方便吗!没错,这个也是主管让我去做私有库时候我的第一反应,我觉得module有很强大的优势啊,为什么还要去花精力去做私有库呢!但主管的一句话说服了我,具体怎么说的我忘记了,我就说我理解的吧:私有库的用途是让你在开发其他app时候需要这个模块的时候就直接引入这个模块,而模块的作用相当于一个零件,如果通过module的形式,很容易造成,这个项目里加了方法,改了方法,那个项目里没改,或者改了其他的方法,这样子的形式来作为模块的话当然是不够优秀的。所以,我们要搭建私服,用的最多的就是我要介绍的Nexus了。

首先,你可以在本地先搭个Nexus试试,下载地址:点击打开链接

Nexus 3.xx直接下载.dmg或者.exe即可。Nexus 2.xx则需要下载安装包,然后进行一大堆的配置,具体配置读者可以去自行谷歌或者百度。直接.dmg下载下来很方便噢。噢,安装之前要确保电脑上是否安装了JDK,如果没有安装,那么得先去安装JDK。

安装3.xx的同学安装完以后,打开,进入是这样子的界面:


安装2.xx的同学进去是这样的,我也去试了一下:


个人觉得3.xx界面上来说友好多了,但是仓库设置稍微有点难找。。。下面均以3.xx为例子讲解,点击右上角的登录,默认账户名密码是admin/admin123。登录进去以后,左上角会有个设置按钮,(有时候会没有,我估计是bug吧,所以很难找,一开始我愣是没找到),进去以后,左边有个Repositories,你会发现已经有很多个仓库建好了,如图:


每个仓库都有自己的属性,选择一个仓库就可以查看这个仓库的一些具体信息。我们的目的主要是把我们的项目代码发布到这些仓库里去,既然要发布到这些仓库上去,我们就不想我们的代码外泄出去,那我们就要选择hosted类型的仓库,hosted类型是Nexus oss所在自己本地的服务器上的仓库,比较安全。我们进行操作的时候,其实最主要的还是maven-releases和maven-snapshots两个仓库,这两个仓库有什么区别呢?只是一个Deployment Policy部署协议上的区别,maven-releases上的是Disable Redeploy(不允许重复部署),意思就是部署上去的就是正式版本的库,如果之后更新lib只能以更新版本号的形式操作。而maven-snapshots则是Allow Redeploy(允许重复部署),顾名思义,就是不需要更新版本号,只要groupId,artifactId,version相同就可以进行覆盖,一般用于你的module还没进行完全测试的时候。其实一般项目开发中module中的写的方法都可以在项目中直接引用测试,测试通过以后再上传到私有库上,再加上开发进度比较紧,所以我开发中一般不太上传到snapshots上。。。当然从程序严谨程度上还是有必要进行这一步的。。。这里主要考虑到了成本问题。

仓库搞好了,之后我们就要把我们的代码上传到私有库上了,首先新建一个Android项目,然后new module,在module的bulid.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目录下添加grade.properties配置文件:

GROUP=//.........VERSION_NAME=1.0.0POM_ARTIFACT_ID=//.........SNAPSHOT_REPOSITORY_URL=//....RELEASE_REPOSITORY_URL=//....NEXUS_USERNAME=adminNEXUS_PASSWORD=admin123
其中GROUP为对应的groupId,看build.gradle就可以知道这里的逻辑是如果groupId名字中包含SNAPSHOT字符,module就发不到snapshots仓库里,否则发布到releases仓库。VERSION_NAME就是对应的版本号,记住发到releases仓库上的项目更新以后版本号要加上去。POM_ARTIFACT_ID就是对应的artifactId值。在私有库中,你的项目是以group:artifactId:version的形式存放的。接下来两个url就是对应snapshots和releases的仓库地址。如果你是本地搭建的nexus,如果你是mac,在终端中输入ifconfig命令行就可以知道你的ip地址了。

配置完毕,在AndroidStudio右边的Gradle面板中找到对应的module,然后在upload里有一个uploadArchive选项,双击就可以了,然后就build success了!私有库上传成功!

私有库上传成功以后,我们就可以在所有项目中直接引用这个私有库了。引用的方法很简单,在项目的build.gradle里allprojects下添加:

maven{    url("http://192.168.20.78:8081/repository/maven-releases/")}

然后就可以在app目录下build.gradle里直接compile就可以了,记住格式,group:artifactedId:version,就像这样:

compile 'com.cgtz.test:test:1.0.0'

具体公司项目开发中,新创一个git的项目,在这个项目中新建module上传私有库,并可以在app里对各个方法进行测试,至此,私有库的玩法就介绍完毕了.



1 0