Maven上传(二)

2019-06-06  本文已影响0人  春生_7291

使用gradle发布aar到jcenter仓库

一、前言

目前Android Studio 新建工程时 ,在工程路径下的build.gradle 中 默认生成如下

repositories {
        google()
        jcenter()
    }

默认支持 jcenter,其他如maven 还要手动添加 例如

repositories {
        maven{ url"https://maven.google.com"}
        mavenCentral()
        maven { url "https://jitpack.io" }
    }

二 、准备工作

1 注册bintray账号

1 进入 https://bintray.com/ 注册账号 ,注册需要翻墙,
注意不能使用 qq.com 结尾这样的邮箱,果然 调整汉子顺序不影响阅读,搞笑一下 我们继续撸。
2 注册完成后,需要登录邮箱点击链接激活;当然也可以选择第三方登录,比如github 。

2 获取api key

登录后,选择 Edit Profile

image.png
或 打开https://bintray.com/profile/edit
左边菜单的最下面有API Key选项,点击后:
image.png
输入密码点击 submit ,会显示Your API key,复制API key,gradle 配置中会用到。
3 创建仓库

点击 New Repository


image.png

name:仓库名称 可以随便取 ,复制name,gradle配置中需要
type: 仓库类型 我们选择 Maven
Licenses :许可证 ,不太了解,跟gradle配置中保持一致就行了。

仓库创建好了 我们就可以上传jar了。

三、配置gradle项目

1 创建 Android Studio 项目,
添加一个module 比如我的是 permission ,在permission中进行相关功能的处理

2 配置gradle

1 在工程目录下的gradle 中添加发布项目的插件.

  dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'

        //两个帮助发布项目的插件
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.1'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

2 在 module 目录中添加 gradle.properties(如果没有的话)内容如下:


image.png

3 在 local.properties 中配置用户名和apikey(bintrary.com刚申请的)


image.png
4 在module 的gradle 中配置
根节点添加 如下:
// 上传插件
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
version = MAVEN_VERSION
def siteUrl = 'https://github.com/xxx/xxxx'    // project homepage
def gitUrl = 'https://github.com/xxx/xxxx.git' // project git
group = MAVEN_GROUP_ID// Maven Group ID for the artifact
// 根节点添加
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                //version MAVEN_VERSION
                //groupId MAVEN_GROUP_ID
                //artifactId MAVEN_ARTIFACT_ID
                packaging MAVEN_PACKAGING
                description MAVEN_DESCRIPTION
                name MAVEN_NAME
                url MAVEN_URL
                inceptionYear MAVEN_INCEPTION_YEAR

                scm {
                    tag "1.0"
                    url siteUrl
                    connection gitUrl
                    developerConnection gitUrl
                }
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'//刚才创建仓库时的许可证
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                        //distribution "repo"
                    }
                }
                developers {
                    developer {
                        id POM_DEVELOPER_ID
                        name POM_DEVELOPER_NAME
                        email POM_DEVELOPER_EMAIL
                    }
                }

            }
        }
    }
}

//打包 sourcesjar
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
//打包 javadocjar
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

Properties properties = new Properties()
boolean isHasFile = false
if (project.rootProject.file('local.properties') != null){
    isHasFile = true
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
bintray {
    user = isHasFile ? properties.getProperty("bintray.user") : System.getenv("bintray.user")
    key = isHasFile ? properties.getProperty("bintray.apikey") : System.getenv("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"//仓库名称
        name = MAVEN_NAME//项目名称  project name in jcenter
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

备注 :
1 repo :仓库名称 是在bintrary 创建的仓库名,能找到就行了
2 gitUrl : 项目链接地址 不能为空地址。

5 上传

1 最方便的方式 选择如下


image.png

2 在Terminal中 输入命令行方式
麻烦 就不写出来了。

如果出现此种错误


image.png

在上传过程中执行了javadoc检查,所以可能会报上面的错误,解决方法就是避免进行javadoc的检查。
1 注释

artifacts {
    //archives javadocJar
    archives sourcesJar
}

2 在工程根目录下的 build.gradle下面添加如下配置:

allprojects {
    repositories {
        google()
        jcenter()
    }
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}
审核结果

1 登录 https://bintray.com
选择 Repository -> 上传的项目 --> 点击项目详情--->进入具体版本
找到 Add To jcenter,点击进入后,写一些该库的描述 就可以提交了。
注意 :右上角 包含一个Edit按钮,点击进入后,可以删除当前版本。
2 审核等待两三个小时 就会有结果,
通过或通不过都会有通知和邮件提示。

image.png
如上形式 说明审核通过了,就可以愉快的使用我们的jar了
此外还可以根据你上传的groupId,访问该网站https://jcenter.bintray.com/你的groupId例如https://jcenter.bintray.com/com/github/zuochunsheng/如能引用,则可以看到如下:
image.png
依赖使用

1 Maven Info 含有jar依赖方式


image.png

在需要的工程 gradle dependencies中 添加如下

compile 'com.github.zuochunsheng:permission:0.3'

就能使用这个 6.0权限申请的库了。

简单介绍一下 ,如下 使用还挺简单,方便。

 //工具类 使用方式
        PermissionUtil.getInstance(this)
                .requestRunTimePermission(new String[]{Manifest.permission.CALL_PHONE,
                                Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        new IPermission() {
                            @Override
                            public void onGranted() {
                                Toast.makeText(MainActivity.this,"所有权限都同意了",Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onDenied(List<String> deniedPermission) {
                                for (String permission :deniedPermission) {
                                    Toast.makeText(MainActivity.this,"被拒绝权限:"  + permission,Toast.LENGTH_SHORT).show();
                                }

                            }
                        }
                );

需要注意一点 ,同一个版本的包只能上传一次 ,除非把该版本删除 ,
需要更新 则需要增加版本号 ,上传成功后可以直接使用 不在需要 add to jcenter 等待审核,更新相当方便。由此 并不能保证更新版本的准确性,bintray更新就是, 只管上传成功 哪管是好是坏。

参考
使用Gradle发布aar项目到JCenter仓库

上一篇 下一篇

猜你喜欢

热点阅读