Android Library 上传到 Nexus Repository

目的

        最近在搞项目拆分,分层成库和技术库Maven 化,实际中遇到比较蛋疼的问题,记录下来以备后时只需;

环境准备与配置

1. Android Studio: <code>v3.1.2</code>

2. Android-maven-gradle-plugin: <code>v2.0</code>

3. Gradle Version: <code>v4.1</code>


注意:

不同的版本对应关系,有不同的依赖问题,否则编译不通过哦;

具体细节,如图所示:


步骤

1. 配置工程目录下的project,build.gradle 脚本(注意,不是modules 下的build.gradle哦)

buildscript {

    ext.kotlin_version = '1.1.51'
    ext.android_plugin_version = '3.0.1'
    ext.android_maven_gradle_plugin = '2.0'

    repositories {
        mavenCentral()
        jcenter()
        google()
        maven { url 'http://localhost:8081/nexus/content/repositories/thirdparty' }
    }
    dependencies {
     
        classpath "com.android.tools.build:gradle:$android_plugin_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.github.dcendents:android-maven-gradle-plugin:$android_maven_gradle_plugin"
    }
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
        google()
        maven { url 'http://localhost:8081/nexus/content/repositories/thirdparty' }
    }
}

2. 配置modules 目录下(你将要上传到maven库的library),build.gradle 脚本

apply plugin: 'com.github.dcendents.android-maven'

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.srcDirs
}

tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
}

tasks.withType(Javadoc) {
    options.encoding = "UTF-8"
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

uploadArchives() {
    repositories {
        mavenDeployer {
            repository(url: MAVEN_REPO_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            snapshotRepository(url: MAVEN_SNAPSHOT_REPO_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }

            pom.groupId = POM_GROUP_ID
            pom.artifactId = POM_ARTIFACT_ID
            pom.version = POM_VERSION

            pom.project {
                name POM_NAME
                packaging POM_PACKAGING
                description POM_DESCRIPTION
                url POM_SITE_URL

                scm {
                    url POM_SCM_URL
                    connection POM_SCM_CONNECTION
                    developerConnection POM_SCM_DEV_CONNECTION
                }

                licenses {
                    license {
                        name POM_LICENSE_NAME
                        url POM_LICENSE_URL
                        distribution POM_LICENSE_DISTRIBUTION
                    }
                }

                developers {
                    developer {
                        id POM_DEVELOPER_ID
                        name POM_DEVELOPER_NAME
                    }
                }
            }
        }
    }
}

如果遇到javadoc 编译不通过的情况,而此时的注释不符合规范的话,请使用如下脚本配置,

apply plugin: 'com.github.dcendents.android-maven'

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task androidJavadocs(type: Javadoc) {
    options.encoding "UTF-8"
    options.charSet 'UTF-8'
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    options.links("http://docs.oracle.com/javase/7/docs/api/");
    options.linksOffline "http://d.android.com/reference", "${android.sdkDirectory}/docs/reference"
    exclude '**/BuildConfig.java'
    exclude '**/R.java'
    failOnError = false
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

uploadArchives() {
    repositories {
        mavenDeployer {
            repository(url: MAVEN_REPO_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            snapshotRepository(url: MAVEN_SNAPSHOT_REPO_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }

            pom.groupId = POM_GROUP_ID
            pom.artifactId = POM_ARTIFACT_ID
            pom.version = POM_VERSION

            pom.project {
                name POM_NAME
                packaging POM_PACKAGING
                description POM_DESCRIPTION
                url POM_SITE_URL

                scm {
                    url POM_SCM_URL
                    connection POM_SCM_CONNECTION
                    developerConnection POM_SCM_DEV_CONNECTION
                }

                licenses {
                    license {
                        name POM_LICENSE_NAME
                        url POM_LICENSE_URL
                        distribution POM_LICENSE_DISTRIBUTION
                    }
                }

                developers {
                    developer {
                        id POM_DEVELOPER_ID
                        name POM_DEVELOPER_NAME
                    }
                }
            }
        }
    }
}

3. 配置上传到maven repo 前所需的配置项,如下所示:

备注:

请在准备要上传的modules 中gradle.properties 中配置,如果没有请新建gradle.properties 文件

##############################################################################
# 基础,描述信息
# 包格式
POM_PACKAGING=aar
# 包名称
POM_NAME=library
# 组名称
POM_GROUP_ID=com.xxx
# 模块名称
POM_ARTIFACT_ID=library
# 版本名称,POM_VERSION 后面加-SNAPSHOT表示发布的是版本快照
POM_VERSION=0.0.1
##############################################################################
# 项目,描述信息
POM_DESCRIPTION=the android describe library.
POM_SITE_URL=http://git.xxx/xxx.git
POM_SCM_URL=http://git.xxx/xxx.git
[email protected]/[email protected]/xxx.git
# 项目,托管描述信息
MAVEN_REPO_URL=http://localhost:8081/nexus/content/repositories/thirdparty
MAVEN_SNAPSHOT_REPO_URL=http://localhost:8081/nexus/content/repositories/thirdparty
POM_SCM_CONNECTION=scm:[email protected]
POM_SCM_DEV_CONNECTION=scm:[email protected]/xxx.git
##############################################################################
# 开发者,描述信息
POM_DEVELOPER_ID=dovsnier
POM_DEVELOPER_NAME=dovsnier
[email protected]
##############################################################################
# 声明,描述信息
POM_LICENSE_NAME=The Apache Software License, Version 2.0
POM_LICENSE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENSE_DISTRIBUTION=repo

由于上传到maven repo 上需要用户名和密码,此时可以放在本地机器全局gradle 配置下(如果没有,自己创建一个gradle.properties 文件),

路径:

C:\Users\xxx\.gradle\gradle.properties
#Nexus 默认用户名
NEXUS_USERNAME=admin
#Nexus 默认密码
NEXUS_PASSWORD=admin123
#
#GPG 秘钥ID
#signing.keyId=
#GPG 秘钥密码
#signing.password=
#GPG 秘钥文件路径
#signing.secretKeyRingFile=
上传到公共Maven 上的时候是需要GPG 这玩意的,上传本地的机器上暂时不需要配置这些;


4. 在android studio 中,打开console 窗口(Alt + F12),执行如下命令:

gradlew --info clean uploadArchives
如果没啥问题的话,执行成功后,如下所示:


如果遇到,如下的提示:

Could not find metadata ... library/maven-metadata.xml in remote (http://localhost:8081/nexus/content/repositories/thirdparty)

首次上传该库的时候找不到metadata,其实上面是有的,后续版本的上传就不会提示了;

上传到本地maven 路径成功后,可登陆Nexus 上瞅瞅,如图所示:


此时,过程结束;







参考

1android-maven-gradle-plugin

猜你喜欢

转载自blog.csdn.net/dovsnier/article/details/80312675