配置私有maven服务器管理android项目依赖

来源:互联网 发布:天尚网络电视机顶盒 编辑:程序博客网 时间:2024/06/09 18:13
  1. 1. 安装maven服务器
  2. 2. 上传库文件
  3. 3. 使用库文件

之前的一篇文章记录了如何使用git submodule(或者svn external)功能和gradle进行依赖管理,但是实际操作的时候发现一个问题,即Android库和Android项目包名部分重复的时候,修改包名就变得非常麻烦,举例说明

项目A依赖于基础库B,A的包名为me.test.projectA,B的包名为me.test.libraryB,此时我需要修改A的包名,我们知道使用Android Studio修改包名还是比较方便的,它会自动修改import语句,减少工作量,但是当我们把A的包名修改为com.other.projectA的时候,B的包名也会跟着改为com.other.libraryB。更糟糕的是,如果我不小心将这些改动提交到版本控制中,就会对其他所有的项目造成影响。

所以这种方式并不是很适合多个项目同时依赖一个基础库,并且每个项目都有可能更改包名的情况,针对这种情况,必须建立私有maven服务器。

建立私有maven服务器,可以同时满足方便修改包名、保护私有库文件、享受gradle打包的便利,同时也能满足嵌套依赖(例如B依赖基础库C)。

安装maven服务器

我使用的是nexus,按照官方教程安装,没有什么需要特殊说明的地方。

上传库文件

maven服务器创建之后就可以上传库文件了,上传工具同样是gradle,具体流程

配置library下的gradle.properties文件

NEXUS_VERSION=1.0NEXUS_GROUP_ID=me.testNEXUS_ARTIFACT_ID=libraryBNEXUS_RELEASE_URL=http://192.168.1.2:8081/repository/maven-release/NEXUS_SNAPSHOT_URL=http://192.168.1.2:8081/repository/maven-snapshot/NEXUS_USERNAME=adminNEXUS_PASSWORD=admin123

为了保证build.gradle的简洁性,我们新建一个gradle文件,nexus.gradle

apply plugin: 'maven'apply plugin: 'signing'configurations {    deployerJars}repositories {    mavenCentral()}// 判断版本是Release or Snapshotsdef isReleaseBuild() {    return !VERSION.contains("SNAPSHOT");}// 获取仓库urldef getRepositoryUrl() {    return isReleaseBuild() ? NEXUS_RELEASE_URL : NEXUS_SNAPSHOT_URL;}uploadArchives {    repositories {        mavenDeployer {            beforeDeployment {                MavenDeployment deployment -> signing.signPom(deployment)            }            pom.version = NEXUS_VERSION            pom.artifactId = NEXUS_ARTIFACT_ID            pom.groupId = NEXUS_GROUP_ID            repository(url: getRepositoryUrl()) {                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)            }        }    }}// 进行数字签名signing {    // 当 发布版本 & 存在"uploadArchives"任务时,才执行    required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }    sign configurations.archives}// type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义task androidJavadocs(type: Javadoc) {    // 设置源码所在的位置    source = android.sourceSets.main.java.sourceFiles}// 生成javadoc.jartask androidJavadocsJar(type: Jar) {    // 指定文档名称    classifier = 'javadoc'    from androidJavadocs.destinationDir}// 生成sources.jartask androidSourcesJar(type: Jar) {    classifier = 'sources'    from android.sourceSets.main.java.sourceFiles}// 产生相关配置文件的任务artifacts {    archives androidSourcesJar    archives androidJavadocsJar}

然后在build.gradle文件中调用nexus.gradle

apply from: 'nexus.gradle'

使用库文件

使用私有maven服务器上的库文件很简单,只需设置好服务器地址,然后就在gradle中添加依赖即可。
修改根目录build.gradle文件

allprojects {    repositories {        maven { url "http://192.168.1.2:8081/repository/maven-snapshot/" }    }}

在module下的build.gradle文件中添加依赖

dependencies {    ...    compile 'me.test:libraryB:1.0-SNAPSHOT'}

除了上述这些原因促使我更改基础库的依赖方式和管理工具,还有一个非常重要的因素就是一致性,即统一了公司iOS项目和Android项目依赖管理方式,作为技术负责人来说我感到非常舒心。
从去年年底,我就渐渐把公司项目的项目依赖管理工具从CocoaPods改为Carthage了,可以看一下这篇文章,简单了解一下。