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

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

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





  有一个好的库想与世界的伙伴分享,于是共享到GitHub上,于是有人看到了,但是要使用却发现配置非常难。但是发现别人的库只需要一行代码却能使用;于是我想知道为什么能这么简单。

在这篇文章中将带你了解如何发布你的库到远程仓库Maven中,又如何使用。

# <a name="t0"></a>准备



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




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


# <a name="t1"></a>开始



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



## <a name="t2"></a>编写Lib



  编写库,这里我采用的是Android-Studio;至于其使用建立过程以及简单使用大家可见:[环境配置之正式版Android Studio 1.0](http://blog.csdn.net/qiujuer/article/details/41843095)





  在这里我使用 [Genius-Android](https://github.com/qiujuer/Genius-Android) 开源库进行演示。

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

## <a name="t3"></a>编写发布文件



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

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

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



```

def isReleaseBuild() { &lt;span class="hljs-keyword">return&lt;/span> VERSION_NAME.contains(&lt;span class="hljs-string">"SNAPSHOT"&lt;/span>) == &lt;span class="hljs-keyword">false&lt;/span> }

    
    
      - 1
      
      - 2
      
      - 3
      
    
    
    

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

    
    ## <a name="t4"></a>gradle.properties
    
    

      在 **“maven_push”** 文件中所有的字段都是访问的你的 **“gradle.properties”** 文件。
 ![这里写图片描述](http://img.blog.csdn.net/20150311174414025)
 可以看见我们的项目中有两个这样的文件,两个文件中的内容都可以全部写到一个文件中。之所以写出两个,下面那个代表的是本项目中的全局变量,至于 UILib 中的那个则只局限于 UILib 中使用。
    

    
    

      现在我们分别打开看看,首先打开下面那个全局的文件。
 ![这里写图片描述](http://img.blog.csdn.net/20150311174954526)
    

    
    

      在这里我们需要更改的地方有如下几个地方:
 ![这里写图片描述](http://img.blog.csdn.net/20150311182302469)
    

    
    

      再来看看库中的文件:
 ![这里写图片描述](http://img.blog.csdn.net/20150311175830185)
    

    
    **
      

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

    </blockquote>
    
    ```
`dependencies &lt;span class="hljs-cell">{
    compile &lt;span class="hljs-string">'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'&lt;/span>
}&lt;/span>`
  - 1
  
  - 2
  
  - 3
  




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

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

  很简单,在[Android-Studio 缓存文件夹配置](http://blog.csdn.net/qiujuer/article/details/44160127) 中有讲解**“.gradle”**目录对吧?那么现在我们去看看 这个目录中有什么。

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

**
  

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

</blockquote>



  打开该文件我们能看见:

这里写图片描述

  - 密钥的相关东西请见:[使用GPG对文件进行签名加密](http://blog.csdn.net/qiujuer/article/details/44173611)
  
  - Sonatype 用户名密码详见:[注册 Maven 仓库 sonatype.org 账户](http://blog.csdn.net/qiujuer/article/details/44195199)
  


## <a name="t5"></a>build.gradle



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

这里写图片描述

```

android { &lt;span class="hljs-built_in">source&lt;/span>Sets { main { manifest.srcFile &lt;span class="hljs-string">'src/main/AndroidManifest.xml'&lt;/span> java.srcDirs = [&lt;span class="hljs-string">'src/main/java'&lt;/span>] res.srcDirs = [&lt;span class="hljs-string">'src/main/res'&lt;/span>] } } lintOptions { abortOnError &lt;span class="hljs-literal">false&lt;/span> } } apply from: &lt;span class="hljs-string">'https://raw.github.com/qiujuer/BeFoot/master/blog/gradle-mvn-push/gradle-mvn-push.gradle'&lt;/span>

    
    
      - 1
      
      - 2
      
      - 3
      
      - 4
      
      - 5
      
      - 6
      
      - 7
      
      - 8
      
      - 9
      
      - 10
      
      - 11
      
      - 12
      
      - 13
      
    
    
    # <a name="t6"></a>发布
    
    

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

    
    ## <a name="t7"></a>执行发布命令
    
    

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

    
    ```
`&lt;span class="hljs-variable">$ &lt;/span>gradle clean build uploadArchives`
  - 1
  




  ![这里写图片描述](http://img.blog.csdn.net/20150311213106249)

第一次操作的时候将会下载一大堆的依赖。 这里写图片描述 最后出现成功提示则OK。 这里写图片描述

## <a name="t8"></a>检查快照版本



  在这里我们进入:[https://oss.sonatype.org/content/groups/public/](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 &lt;span class="hljs-string">"https://oss.sonatype.org/content/repositories/snapshots/"&lt;/span> } } compile &lt;span class="hljs-string">'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'&lt;/span> }

    
    
      - 1
      
      - 2
      
      - 3
      
      - 4
      
      - 5
      
      - 6
      
    
    
    

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

    
    ```
`compile &lt;span class="hljs-string">'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT-2'&lt;/span> `
  - 1
  


## <a name="t9"></a>发布“Release”



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

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

## <a name="t10"></a>操作仓库发布



  要完成“Release”版本的发布还需要登陆到后台中进行一些简单的操作。

网站:https://oss.sonatype.org/ 登陆:用户名与密码与https://issues.sonatype.org/中的完全一样。 登陆成功后点击左边导航中的:“Staging Repositories” 这里写图片描述 在其中根据你的GroupId去找你对应的一行。比如我的Id:“com.github.qiujuer”那么就是: 这里写图片描述 找到后点击他,如果不是你的或者你没有找到那么看看是不是你上面根本就没有上传成功。 这里写图片描述 选中后点击上面的**“Close”**按钮,填写描述信息;然后等待一段时间;在这个过程中你可以点击刷新按钮。 这里写图片描述 在下面可以看见发送了邮件提醒,然后上面的 “Release” 按钮可以点击了,此时点击该按钮,填写描述信息,不必太多。然后等待;当下面同样出现发送了邮件提醒的时候那么恭喜你发布成功了。

**
  

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

</blockquote>



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



```

dependencies &lt;span class="hljs-cell">{ compile &lt;span class="hljs-string">'com.github.qiujuer:genius-ui:3.0.0'&lt;/span> }&lt;/span>

    
    
      - 1
      
      - 2
      
      - 3
      
    
    
    # <a name="t11"></a>附件
    
    

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

    
    # <a name="t12"></a>一些问题
    
    

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

    
    

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

    
    

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

    
    ## <a name="t13"></a>仓库唯一
    
    

      发布项目到Maven 仓库 ,必须要使用sonatype.org么?sonatype.org是一个载体?还有其他选择?
 答案是:有其他的选择~
 如果 Gradle 没有内置你的仓库地址你也可以指定,甚至可以使用自己部署的服务器来发布。比如:
 ![这里写图片描述](http://img.blog.csdn.net/20150312100018050)
 这个就是发布到 快照 仓库,但是快照仓库地址 Gradle 并不知道,所以需要指定。
    

    
    # <a name="t14"></a>一些题外话
    
    

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

    
    

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

    
    

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

    
    

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

    
    

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

  </div>
</div>

<div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" data-mod="popu_172" data-bd-bind="1458097570578">
</div>

<div id="digg">
</div>

💬 评论