========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131
——学之开源,用于开源;初学者的心态,与君共勉!

========================================================

有一个好的库想与世界的伙伴分享,于是共享到GitHub上,于是有人看到了,但是要使用却发现配置非常难。但是发现别人的库只需要一行代码却能使用;于是我想知道为什么能这么简单。
在这篇文章中将带你了解如何发布你的库到远程仓库Maven中,又如何使用。

准备

开始之前我们有一定的准备工作,如果准备好了那么后面将会非常顺畅。

  • 注册 https://issues.sonatype.org 账户,并创建你的 Group Id
  • 学会GPGTools的使用,并生成你的密钥对;见:使用GPG对文件进行签名加密
  • 编写你的库,并准备好发布,工具:Android-Studio
  • 添加发布Maven的Gradle文件
  • 添加你的个人信息,如你的发布地址、库版本信息等
  • 开发发布快照、以及正式版本,审核

开始

前面的两项工作由于篇幅较大,单独开篇了,欢迎大家去看~~,我们从第三的地方开始。

编写Lib

编写库,这里我采用的是Android-Studio;至于其使用建立过程以及简单使用大家可见:环境配置之正式版Android Studio 1.0

在这里我使用 Genius-Android 开源库进行演示。

在本次项目中我们尝试发布 UI 部分,图中圈起来部分为我们需要的文件。

编写发布文件

发布文件就是其中的 maven_push.gradle 。由于代码较长就不贴代码了,大家可以去GitHub上查看。

代码已经发布到 BeFoot 开源项目中.
该代码运行在 Gradle 中,作用是按照配置进行打包代码文件,然后签名文件,最后发布你的文件到仓库。

在该代码中可以看见许多的方法与参数,如:

def isReleaseBuild() {return VERSION_NAME.contains("SNAPSHOT") == false
}

这个方法的作用是判断版本名称是否含有 “SNAPSHOT”字段,也就是判断当前是否发布的是快照版本,以便传输到不同的服务器地址。
但是其中的 “VERSION_NAME” 哪里来的呢?往下看~~

gradle.properties

“maven_push” 文件中所有的字段都是访问的你的 “gradle.properties” 文件。

可以看见我们的项目中有两个这样的文件,两个文件中的内容都可以全部写到一个文件中。之所以写出两个,下面那个代表的是本项目中的全局变量,至于 UILib 中的那个则只局限于 UILib 中使用。

现在我们分别打开看看,首先打开下面那个全局的文件。

在这里我们需要更改的地方有如下几个地方:

再来看看库中的文件:

这里相对简单的多了,无非就是名称,ID,类型,版本等信息。
有必要说明的是,上面的POM_GROUP_ID+POM_ARTIFACT_ID+VERSION_NAME 将会得到如下的使用方式:

dependencies {compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'
}

完了?没~还有一个至关重要的地方,在”Maven_Push”的代码中我们会找到:

以及其中的 signing 部分,但是你会发现你找遍了上面的所有的文件都没有发现这些字段,那么这些字段在哪里呢?

很简单,在Android-Studio 缓存文件夹配置 中有讲解“.gradle”目录对吧?那么现在我们去看看 这个目录中有什么。

可以看见其中也有一个 “gradle.properties”文件,这个文件不在项目中,但是在项目中却可以访问,这是一个全局的文件,任何项目都可以访问该文件,如果你没有,那么可以自己创建一个就OK。

为什么要存储到这里?我们都知道项目中的 “gradle.properties” 文件一般来说都是会提交到 Git 上面去的,所以项目中的文件不应该包含私密的东西,比如密钥对,密钥密码,以及你的 Maven 的账户信息。

打开该文件我们能看见:

  • 密钥的相关东西请见:使用GPG对文件进行签名加密
  • Sonatype 用户名密码详见:注册 Maven 仓库 sonatype.org 账户

build.gradle

现在还需要修改你的项目中的 build 文件,需要更改的地方如下:

android {sourceSets {main {manifest.srcFile 'src/main/AndroidManifest.xml'java.srcDirs = ['src/main/java']res.srcDirs = ['src/main/res']}}lintOptions {abortOnError false}
}
apply from: 'https://raw.github.com/qiujuer/BeFoot/master/blog/gradle-mvn-push/gradle-mvn-push.gradle'

发布

如果你上面的都做到了,那么现在进入发布的地段了~~

执行发布命令

Android-Studio进入项目中,打开“Terminal”窗口,进入你的项目中,执行命令:

$ gradle clean build uploadArchives


第一次操作的时候将会下载一大堆的依赖。

最后出现成功提示则OK。

检查快照版本

在这里我们进入:https://oss.sonatype.org/content/groups/public/
找到你的项目地址,我本次的是:
https://oss.sonatype.org/content/groups/public/com/github/qiujuer/genius-ui/3.0.0-SNAPSHOT/

可以看出其中有着原始文件以及签名等验证文件。
如果你的没有“asc”文件,那么发布“Release”版本时将无法通过审核。

也不是说快照版本就无法使用,同样可以,其使用方式为:

dependencies {repositories {maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }}compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'
}

如果发布了过个快照版本,那么就为:

compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT-2' 

发布“Release”

该发布方法操作命令行的方式与快照版本一样,完全一样;只需要更改你的库中的:gradle.properties 文件中的 VERSION_NAME ,删除掉后面的 “”-SNAPSHOT”“ 就OK。

之后执行命令行命令;然后你会发现你在:
https://oss.sonatype.org/content/groups/public/
中无法找到你发布的 “Release”版本;这是正常的;如果现在找到了反而不正常。

操作仓库发布

要完成“Release”版本的发布还需要登陆到后台中进行一些简单的操作。
网站:https://oss.sonatype.org/
登陆:用户名与密码与https://issues.sonatype.org/中的完全一样。
登陆成功后点击左边导航中的:“Staging Repositories”

在其中根据你的GroupId去找你对应的一行。比如我的Id:“com.github.qiujuer”那么就是:

找到后点击他,如果不是你的或者你没有找到那么看看是不是你上面根本就没有上传成功。

选中后点击上面的“Close”按钮,填写描述信息;然后等待一段时间;在这个过程中你可以点击刷新按钮。

在下面可以看见发送了邮件提醒,然后上面的 “Release” 按钮可以点击了,此时点击该按钮,填写描述信息,不必太多。然后等待;当下面同样出现发送了邮件提醒的时候那么恭喜你发布成功了。

如果在上面你上传的文件中没有签名文件那么将无法操作成功;此时你应该重新上传有签名的版本。

发布成功后你的使用方式为(你并不能立即就能使用,一般需要10分钟及其以上的时间):

dependencies {compile 'com.github.qiujuer:genius-ui:3.0.0'
}

附件

本次操作中需要的文件我都上传到 GitHub 上了。
地址:https://github.com/qiujuer/BeFoot/tree/master/blog/gradle-mvn-push

一些问题

该地方,暂时就不写了,太长了~~
说一个简单的吧:如果执行发布命令时出现:401 错误,代表你的账户登录失败,也就是你的账户名或者密码错误。

其他问题,大家如果遇到了可以提出来我会一一回答的。

==============追加===============

仓库唯一

发布项目到Maven 仓库 ,必须要使用sonatype.org么?sonatype.org是一个载体?还有其他选择?
答案是:有其他的选择~
如果 Gradle 没有内置你的仓库地址你也可以指定,甚至可以使用自己部署的服务器来发布。比如:

这个就是发布到 快照 仓库,但是快照仓库地址 Gradle 并不知道,所以需要指定。

一些题外话

说实话这篇文章,很早以前就想写了;但是大概想了一下感觉篇幅会比较大,所以一直没有写。

这次也是有朋友在问这方面的情况,所以就花了几天时间写了,真的是花了几天时间,不是空闲时间。也许你们看只需要10分钟,或许10分钟都要不到,可我却花了你的100倍甚至更多的时候来写的。

由于是使用的 MarkDown 编辑器(出现BUG意外死掉的情况少)写的,所以没有像以前一样加上高亮等操作,不是不加,而是编辑器还不支持。

========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
网站:www.qiujuer.net
开源库:github.com/qiujuer/Genius-Android
转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131
——学之开源,用于开源;初学者的心态,与君共勉!

========================================================

[Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库相关推荐

  1. 使用Gradle发布工件到Maven仓库

    Gradle发布工件(Publishing Artifacts) 此文章基于Gradle 4.6编写. 1. Maven Plugin(旧版) 使用Maven Plugin发布Artifcat是旧的插 ...

  2. linux gradle仓库位置,如何在Android Studio中使用Gradle发布项目至Jcenter仓库

    简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...

  3. Zxing 的集成 ---- Maven 对应 Gradle 的写法

    刚刚想耍耍二维码,想到了zxing和zbar,又想到zxing是Google老爹的,想想就算了吧,虽然zbar快但是识别错误率也高不少.随手Google了下*zxing 集成*好像都是说什么拷贝项目到 ...

  4. Gradle实战:发布aar包到maven仓库

    查看原文:http://blog.csdn.net/u0108184... Gradle实战系列文章: <Gradle基本知识点与常用配置> <Gradle实战:Android多渠道 ...

  5. Gradle 发布共享库——如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库

    Gradle 发布共享库--如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库 上一篇博文Gradle 发布共享库--如何通过Gradle发布java依赖库(jar)到 ...

  6. [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服

    Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 #前言 andorid开发者经常会看到xx公司发布了xx项目,x ...

  7. android使用bintray发布aar到jcenter

    前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面,这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了,况且现在and ...

  8. Gradle 7.0+发布Gradle插件到私有maven仓库笔记

    最近用Java写了一个Gradle插件 插件介绍 https://blog.csdn.net/wang382758656/article/details/124236006?spm=1001.2014 ...

  9. Android studio 使用Gradle发布Android开源项目到JCenter 总结

    1.注册账号 先到https://bintray.com注册一个账号.  这个网站支持 github 账户直接登录的 2.获取  bintray.user  和 bintray.apikey      ...

  10. Maven-将jar包发布到本地maven仓库与私服

    创建一个项目,并创建 library ,不会参考下面: https://blog.csdn.net/wuqingsen1/article/details/103178567 如果 maven 还没有安 ...

最新文章

  1. MATLAB中深度学习的数据集合
  2. 回文数猜想代码c语言,跪求用C++写出回文数猜想程序,课程设计需要,谢谢。。。...
  3. svn命令在linux下的使用
  4. 隐藏Nginx和PHP版本号
  5. 设计模式:单例模式之双重检查
  6. effective C++ 条款 5:了解c++默认编写并调用那些函数
  7. System.Text.Json 中的 JsonExtensionData
  8. wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法
  9. oracle查询语句大全(oracle 基本命令大全一)
  10. 【Henu ACM Round#19 A】 Vasya the Hipster
  11. php 日之泪,php泪中一帮助
  12. Jetson Nano 读取 GPS数据(TTL转 USB)
  13. Python编程基础及应用
  14. winpe装双系统linux_winPE+ubuntu双系统U盘制作
  15. mysql数据库如何查看表空间_MYSQL:查看的数据库表空间
  16. python乒乓球比赛规则介绍_乒乓球比赛的简要规则
  17. 订单需求BOM合并 自动计算
  18. webApp开发-等额本息试算
  19. 计算机数据库三级刷题总结
  20. 【源码阅读】【苦练基本功】Golang内置函数分析

热门文章

  1. rocketmq存储消息mysql_消息中间件—RocketMQ消息存储(一)
  2. 怎样在全球的Azure上开Case
  3. Android NavigationView中设置menu中的item字体颜色
  4. nginx简单的rewrite配置
  5. [转]Understanding Integration Services Package Configurations
  6. android小小的开发细节
  7. MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]
  8. html img 自动缩放,网页HTML 5图片自适应屏幕 img等比例缩放大小代码
  9. Java内存模型基础知识
  10. Spring AOP实现及运行期调用原理分析