Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544

前言

andorid开发者经常会看到xx公司发布了xx项目,xx公司只提供了gradle配置路径我们就能轻松的使用它们的项目到自己的工程中:

譬如:

谷歌自身的库

compile 'com.android.support:appcompat-v7:22.2.0'

第三方库

compile 'com.squareup.okhttp:okhttp:2.7.2'

很多开发者看过之后羡慕不已, 想自己能不能也写一个自己的库让别人用(或者发布已有的本地modul库),或者当多模块开发时,为了进行版本协作,使用自己的maven库是势在必得的!

Maven

Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

更多请点击:Maven

Maven package 是由所谓 POM(Project Object Model)所定义的文件包的一种输出特殊格式。

Maven仓库就是,就是放 Maven包的地方, 所以叫仓库。 这些仓库,可以是放在本地,也可以放在远程服务器上。 可以开放仓库,也可以加密公开的,提供别人下载使用!

一句大白话你就懂了:maven是类似android studio的构建工具, maven包是对于构建工具产出的格式,maven包类似是apk,maven仓库是apk应用市场一样!

Maven仓库

JCenter和MavenCentral

jcenter是由 bintray.com提供的Maven仓库存放的平台服务器,用户可以注册发布托管自己的开源maven包

Maven Central 是由sonatype.org 提供的发布的Maven服务平台。虽然Maven Central和jcenter都是标准的maven仓库服务器。

同样的仓库却毫无联系。 在jcenter上存在的开源库,可能 在Maven Central 上并不存在,反之亦然。 就类似豌豆荚和91助手都可以存在apk下载,但不一定都能搜到同一个应用一样, MavenCentral上发布maven包比发布到jcente有点复杂,当然我们可以将jcenter的包同步到MavenCenter

发布maven包

远程jcenter

Maven

一首先我们需要在jcenter注册一个账号 点我注册

如果你有github直接可以用gitbub账户注册! 然后补充下资料信息!

接着登录成功后我们去获取这个账户的签名key,用来区分账户Id信息,先记录好自己的

key,后面会用到这个信息。

创建moudle

  • 1 创建模块

    如果你是从零开始去写一个组件模块,就直接在as为你的app创建一个

    module, 如果已有请直接绕道到第三步。



当创建好你的module是时候就会生成一个自己的library

接着可以在自己module配置gradle

下面步骤请在自己的moulde中gradle中配置加入。

- 3 申明插件类型

     apply plugin: 'com.github.dcendents.android-maven'
     apply plugin: 'com.jfrog.bintray'
  • 4 配置maven包信息

    //版本号
    version = "1.0.0"
    //这是项目首页
    def siteUrl = 'https://github.com/NeglectedByBoss/Novate'
    //这是源码地址
    def gitUrl = 'https://github.com/NeglectedByBoss/Novate.git'
    // 包名,可以写公司的前缀
    group = "com.tamic.novate"
    
  • 5 定制输出格式信息

        install {
       repositories.mavenInstaller {
      // This generates POM.xml with proper parameters
     pom {
         //pom信息
         project {
          packaging 'aar'
         // Add your description here
          name 'novate'
          url siteUrl
         // Set your license
    licenses {
      //开源协议
       license {
         name 'The Apache Software License, Version 2.0'
          url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
              }
             }
    developers {
      //开发者基本信息
        developer {
        id 'tamic'
        name 'tamic'
        email 'xxxx@xxx.com'
                  }
              }
    
         scm {
            connection gitUrl
            developerConnection gitUrl
            url siteUrl
             }
           }
       }
     }
    }
    
  • 6 输出资源

    task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
      classifier = 'sources'
     }
     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
     }
    
  • 7 配置账号

    这时候加入自己的账号和key,当然你不想加入到local配置中,也可以单独建个prpertites文件,设置git的忽略规则即可。

  • 8 申明编译类型

    在朱项目的gradle中加入下面申明

      buildscript {
      repositories {
      jcenter()
    
     }
     dependencies {
    classpath 'com.android.tools.build:gradle:2.3.0'
    //这里是依赖的插件类型路径,用最新的即可
     classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
     classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
     }
    }
    

提交maven

当我们将项目build时候,as就会生成如下task

双击即可,也可以在命令行输入 gradle brntaryUpload.

如果成功了,可以去预览我们项目,发现会有你发布的包了,我这里有四个项目,如果第一次用只显示一个,直接点击预览自己的Maven包 ,

接着继续打开后发现maven包具体预览界面了,

这时候需要add到仓库中心等管理员审核,如果第一次就会有addjcenter按钮,

提交会打开一个申请页面,你填写评论就Okle ,中文也可以,等到一两小时,搜到系统发来的私信,就代表你的库成功了,这时候就有maven依赖地址生成了,我们可以直接拿来配置就可以了

  • 9 使用mven包

    这个就不用多说了吧,心累!

问题总结

如果发现提示你javadoc不过,就关闭doc检查,

如果发现编码出错,就指定utf-8

在module的gradle中加入

  javadoc {
options{
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}

tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
options.addStringOption('charSet', 'UTF-8')
}

如果希望自己代码混淆请配置好相关规则,这里不再介绍了。

Maven Central

可能很多人还想发布到 Maven Central去,可以接着看,虽然长了点,请仔细耐心看完

  • 注册 sonatye 账户

    到 sonatype issue 页面,注册账号。

  • 创建 issue

    登陆之后,顶部有按钮,Created,下面是关键的条目

    Project: Community Support - Open Source Project Repository Hosting (OSSRH)

    Issue Type: New Project

    Group Id:就是你的包的 groupId

其他信息请加上,提交之后,大概两个工作日, 等系统给你分配了issue之后,就可以进行下面的工作了,这块可以参考 点击介绍

  • 上传包

    配置gradle

    整个结构,

    现在我们将红框内的task覆盖,具体如下

    ext {
      PROJ_GROUPID = 'com.tamic.android'
      PROJ_ARTIFACTID = 'novate' //这是项目名字
       PROJ_VERSION_NAME = "1.0.0"//版本号
    
       POM_PACKAGING = 'aar'
    
      NEXUS_USERNAME = '注册的账号'
      NEXUS_PASSWORD = '这是密码'
      RELEASE_REPOSITORY_URL = '这里是sonatye配置好的线上路径'
       SNAPSHOT_REPOSITORY_URL = '这里是在 sonatye配置好的snaphot路径'
    

    }

    uploadArchives {
    
    repositories {
    mavenDeployer {
        snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
            authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
        }
        repository(url: RELEASE_REPOSITORY_URL) {
            authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
        }
    
        pom.project {
            version PROJ_VERSION_NAME
            groupId PROJ_GROUPID
            artifactId PROJ_ARTIFACTID
            packaging 'aar'
    
         }
    
      }
    

    }

    当然密码可以加载jcenter公用的那个properties文件中,防止上传的代码git上,

    然后运行as命令,或点击下面这个task即可。

    发布maven包

    登陆 oss sonatype,登陆,选择左边栏里的 Staging Repositories, 然后点Close 按钮,sonatype 会做响应的 validation,通过的话,就可以点 Release 发布啦,如果不通过,就检查问题,先 Drop,并重新做 Staging 发布。

    检查包

    在 https://oss.sonatype.org/content/repositories/releases 可以看到你发布的包。

两者同步

如果你觉得这种方式比较麻烦,那么我们可以将JCenter的项目同步MavenCentral到上,

搭建企业maven私服

在项目不端庞大情况下,可能你的项目依赖的module越来越多,这样对版本控制越来越难,大家就像都push到maven库上,但有不想公开自己的maven包,所以MavenCentral提供了自己的企业私服,Sonatype 提供了免费的 sonatype/nexus。

请忽略 作者: http://blog.csdn.net/sk719887916

下载安装 docker 镜像

  $ docker pull sonatype/nexus

开启服务镜像

  $ docker run -d -p 8081:8089 --name nexus sonatype/nexus:oss

访问服务器

因为的 docker-machine ip 是:192.168.99.100,于是可以通过在浏览器访问http://192.168.99.100:8089/ 这个 URL 来访问 sonatype 私服。

条件允许的可以在内网部署一台服务器,用来运行这个maven私服。甚至找运维可以创建自己的Maven域名

默认账户密码是:

  admin
 admin123

配置仓库

点击左侧 repository,会出现 repository 的列表,把其中的 Releases 的 Configutation->Access Setting-> Deploy Polocy 设置成 Allow Redeploy 使得可以重复发布包。

配置上传插件

因为使用了自己的私服 chrisbanes/gradle-mvn-push 插件,稍微改动,所有我们需要修改自己的maven私服repository URL 等,

关键设置

   ext {
PROJ_GROUPID = 'com.tamic.android'
PROJ_ARTIFACTID = 'android_statSdk'
PROJ_VERSION_NAME = "1.0.0"

POM_PACKAGING = 'aar'

NEXUS_USERNAME = 'admin'
NEXUS_PASSWORD = 'admin123'
RELEASE_REPOSITORY_URL = '修改为你配置的路径'
SNAPSHOT_REPOSITORY_URL = '修改为你配置的路径'
}

检测是否成功

上传成功之后,就可以在浏览器的http://192.168.99.100:8089/content/repositories/releases看到这个包。发现存在,说明已经成功了。

使用

指定自己的mven仓库地址



在root的gradle指定你的maven服务器路径就ok了,其他moudule配置和使用第三方库一样。

发布本地Maven

有时候你不想发布到自己公司的内网私服上,只想测试下本地打包机制,这时候随便找个mven包,反到电脑任意路径下。指定本地路径就ok了,下面三种可以随你选择

allprojects {
    repositories {
     //本机仓库
     mavenLocal()

    //内网maven仓库
    maven {  url "你的内网私服地址"  }
    maven {

        url "你的Maven路径"
    }
}

}

经验总结

  • 上传失败,返回400,可能是Configutation->Access Setting-> Deploy Polocy没设置好;返回401,可能是账号密码错误。

  • 如果出现失败,请检版本号是否一致,如果服务器存在的版本号会上传不了,请先删除就版本再上传,

  • 如果出现NOT found you moudle无法上传情况,请只保留一个android STUDIO,在点击上传task.

华丽结束

上面展示了两种发布maven包到仓库的方式,开发者可以自我去选择,maven不仅很好的解决了模块化开发是带来的版本控制问题,也方便了项目对依赖的旧版本回滚控制, 具体在使用的地方可以自己指定maven版本,这次介绍了怎么在gradle发布Maven的姿势,下节在总结下在多模块情况下,开发者想用同一套代码,生成不同apk,设置可以选择不同资源打包的问题。 Gradle多渠道和多版本打包相关的知识,期待你的关注!

Tamic : http://blog.csdn.net/sk719887916

[Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服的更多相关文章

  1. [Gradle系列]Gradle打包apk多版本,多渠道,多环境,多功能,多模块随心所欲

    Tamic: http://blog.csdn.net/sk719887916/article/details/53411771 开始 上篇Gradle发布Module(Maven)到jcenter, ...

  2. 发布开源库到JCenter所遇到的一些问题记录

    这周末自己瞎折磨了下,如何发布开源库到 JCenter,然后这过程中碰到了一些问题,在此记录分享一下 本篇是基于上一篇:教你一步步发布一个开源库到 JCenter 介绍的流程.步骤中所遇到的问题,所以 ...

  3. 教你一步步发布一个开源库到 JCenter

    今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而已,而是尽可能讲清楚,为什么需要有这个步骤,让大伙知其然的同时还知其 ...

  4. 【我的Android进阶之旅】快速创建和根据不同的版本类型(Dev、Beta、Release)发布Android 开发库到Maven私服

    前言 由于项目越来越多,有很多公共的代码都可以抽取出一个开发库出来传到公司搭建好的Maven私服,以供大家使用. 之前搭建的Maven仓库只有Release和Snapshot两个仓库,最近由于开发库有 ...

  5. Microsoft Azure 微软云平台系列新品发布

    在移动为先,云为先的今天,微软为拥抱云文化的企业提供了技术和工具.利用创新且全面的移动解决方案和开发者工具,微软有独到之处,它帮助所有客户在云为先时代中发现潜在价值. 正如希望加快云创新步伐的你们所期 ...

  6. Gradle系列之从零搭建Maven私服库

    原文发于微信公众号 jzman-blog,欢迎关注交流. 前面几篇文章学习了 Gradle 相关知识,Gradle 系列文章如下: Gradle系列之初识Gradle Gradle之Groovy基础篇 ...

  7. 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)

    回顾历史 发布SNAPSHOT版本的问题 解决问题 完整脚本 使用方法 本文原创. 转载请注明CSDN博客出处: http://blog.csdn.net/maosidiaoxian/article/ ...

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

    查看原文:http://blog.csdn.net/u010818425/article/details/52441711 Gradle实战系列文章: <Gradle基本知识点与常用配置> ...

  9. Android Library 发布开源库 JCenter & JitPack 攻略

    对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...

随机推荐

  1. winform 如何加载Url图像(图像)

    解决方法: 1pictureBox1.Image = Image.FromStream(System.Net.WebRequest.Create(http://www.baidu/new.gif ). ...

  2. Linux kernel 4.9及以上开启TCP BBR拥塞算法

    Linux kernel 4.9及以上开启TCP BBR拥塞算法 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bb ...

  3. shell实现脚本监控服务器及web应用

    实际工作中我们需要知道部署在服务器上的应用有没有问题,但是人为的操作太麻烦有咩有简单的方式呢shell来监控我们服务器运行状态以及服务器上部署的应用,如果出现异常就会自动发送一个邮件给我们,开始搞起. ...

  4. 实验吧_天下武功唯快不破&让我进去(哈希长度拓展攻击)

    天下武功唯快不破 第一反应就去抓包,看到返回包的header中有FLAG的值,base64解码后得到下图所示 这就要求我们在请求头中post相应key的值,我直接在burp中尝试了多次都没有用,想起来 ...

  5. codesforces 671D Roads in Yusland

    Mayor of Yusland just won the lottery and decided to spent money on something good for town. For exa ...

  6. SAC E#1 - 一道中档题 Factorial

    题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服 ...

  7. [POI2006]ORK-Ploughing

    Description Byteasar想耕种他那块矩形的田,他每次能耕种矩形的一边(上下左右都行),在他每次耕完后,剩下的田也一定是矩形,每块小区域边长为1,耕地的长宽分别为m和n,不幸的是Byte ...

  8. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. 用Qemu运行/调试arm linux【转】

    转自:https://blog.csdn.net/absurd/article/details/78984244 用Qemu运行/调试arm linux,这事情干过好几次了,久了就忘记了,每次都要重新 ...

  10. python3 条件判断,循环,三元表达式

    一. 条件判断 条件判断的关键字if elif else,具体规则如下: if condition_1: statement_block_1 elif condition_2: statement_b ...