美文网首页Android_SpeakAndroid 闲谈Android知识
Android Studio发布及依赖Maven项目

Android Studio发布及依赖Maven项目

作者: 大鹏说说看 | 来源:发表于2017-04-25 16:38 被阅读2962次

    1、前言:

    由于项目的特殊性,封装了很多基础功能的实现,随着使用这些基础功能的项目增多,对于基础功能代码的版本管理出现了问题,思考后选择发布到Maven仓库,项目中远程依赖这些基础功能的方式解决此问题。

    1.1、目标构建流程:

    整体思路

    解释一下:
    1、项目工程、LIB工程的代码管理仍使用GIT
    2、项目工程不直接依赖LIB工程,而是使用远程依赖,从远程仓库中(Nexus为远程仓库的一种)获取LIB工程生成的AAR或JAR
    3、LIB工程的发布由Jenkins等自动化工具进行(手动发布也可以但不方便管理)

    2、准备工作:

    所需要的环境有:AndroidStudio、Nexus、GIT、Jenkins,其中,AndroidStudio、Nexus是必须的,GIT和Jenkins根据实际需要选择

    2.1、搭建Nexus:

    下载地址:https://www.sonatype.com/download-oss-sonatype
    博主已Mac为例,下载后解压,运行以下命令则启动了nexus

    cd nexus-3.3.0-01/bin
    ./nexus start
    

    nexus的其他命令可通过 ./nexus -help 查看
    浏览器访问:http://localhost:8081/ 打开nexus管理界面
    默认账号:amdin 密码:admin123
    下图的仓库地址,我们后面将用到。

    获取仓库地址

    3、Studio配置Maven

    这里会分两部分讲,
    1:LIB项目发布到仓库
    2:工程项目配置对LIB项目的依赖

    3.1、LIB项目发布到仓库

    3.1.1、找到项目根目录的gradle.properties,添加以下公共常量,此处的仓库地址就是从2.1的图中位置获取

    #maven仓库地址
    MAVEN_REPO_RELEASE_URL=http://localhost:8081/repository/maven-releases/
    MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/repository/maven-snapshots/
    #登录nexus ossde的用户名
    NEXUS_USERNAME=admin
    #登录nexus oss的密码
    NEXUS_PASSWORD=admin123
    # groupid
    GROUP_ID=com.ydp
    # type jar或aar
    TYPE=jar
    # 项目描述
    DESCRIPTION=Maven Test Lib
    
    

    3.1.2、找到项目根目录的build.gradle,此处配置所有项目公用的脚本

    //对所有项目配置依赖的仓库地址
    allprojects {
        repositories {
            jcenter()
            maven { url MAVEN_REPO_SNAPSHOT_URL }
            maven { url MAVEN_REPO_RELEASE_URL }
        }
    }
    //对所有子项目配置
    subprojects {
        apply plugin: 'com.android.library'
        apply plugin: 'maven'
        uploadArchives {
            configuration = configurations.archives
            repositories {
                mavenDeployer {
                    //配置发布到的仓库地址
                    snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
                        authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                    }
                    repository(url: MAVEN_REPO_RELEASE_URL) {
                        authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                    }
                    //项目属性
                    pom.project {
                        //GROUPID+artifactId在maven中确定唯一位置
                        groupId GROUP_ID
                        //打包方式
                        packaging TYPE
                        //描述
                        description DESCRIPTION
                    }
                }
            }
            task androidSourcesJar(type: Jar) {
                classifier = 'sources'
                from android.sourceSets.main.java.sourceFiles
            }
            artifacts {
                archives androidSourcesJar
            }
        }
    }
    

    3.1.3、找到要发布的某个module目录下的build.gradle文件

    //在此处复写uploadArchives,用来配置module中不同的脚本
    apply plugin: 'maven'
    uploadArchives {
        repositories {
            mavenDeployer {
                pom.project {
                    //版本号由各个子项目进行独立配置
                    //后缀加-SNAPSHOT则为快照版本,去掉为release版本,会发布至不同仓库
                    version '1.0.0-SNAPSHOT'
                    //artifactId使用项目名
                    artifactId 'testlib'
                }
            }
        }
    }
    //执行此task,将此module进行发布
    task deploy(dependsOn: uploadArchives) {}
    

    3.1.4、发布module
    执行 指定module的 deploy即可

    执行指定task

    3.2、工程项目配置对LIB项目的依赖

    3.2.1、找到项目根目录的gradle.properties,添加以下公共常量,此处的地址就是从2.1的图中位置获取

    MAVEN_REPO_RELEASE_URL=http://localhost:8081/repository/maven-releases/
    MAVEN_REPO_SNAPSHOT_URL=http://localhost:8081/repository/maven-snapshots/
    

    3.2.2、找到项目根目录的build.gradle,此处配置所有项目公用的脚本

    //对所有项目配置依赖的仓库地址
    allprojects {
        repositories {
            jcenter()
            maven { url MAVEN_REPO_SNAPSHOT_URL }
            maven { url MAVEN_REPO_RELEASE_URL }
        }
    }
    

    3.2.3、找到项目工程需要依赖LIB工程的module目录下的build.gradle

    dependencies {
        ....
        //此处规则为groupid:artifactId:版本号
        //版本号使用+或-SNAPSHOT表示使用最新的快照版本,发版时推荐使用release版本
        compile 'com.ydp:testlib:1.0+'
    }
    

    3.2.4、强制刷新依赖
    由于gradle依赖下载后存在本地缓存,如果使用的快照版本则不会随着build而每次更新,如果需轻质刷新依赖,需要执行以下命令:

    gradle build --refresh-dependencies
    

    至此,完成了仓库搭建、LIB发布、LIB依赖

    相关文章

      网友评论

        本文标题:Android Studio发布及依赖Maven项目

        本文链接:https://www.haomeiwen.com/subject/ycwvzttx.html