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. POJ-1789 Truck History---最小生成树Prim算法

    题目链接: https://vjudge.net/problem/POJ-1789 题目大意: 用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数.一 ...

  2. 解决 Can't Connect to MySQL Server on IPAddress (10061) 的问题

    我的MySQL服务器安装在Ubuntu 14.04.3 LTS操作系统上. 然后我通过局域网内的另一台电脑连不上,但是能ping通. 解决办法是首先找到my.cnf这个文件. 我的文件位置在/etc/ ...

  3. web攻击和防御措施

    1.SQL注入:参照下面的链接 http://www.cnblogs.com/chenhaoyu/p/8758888.html 2.跨网站脚本攻击(Cross Site Scripting, XSS) ...

  4. angularjs中的几种工具方法

    1.比较两个字符串是否相等 2.对象形式转化成json和json转化成字符串形式 3.便利对象遍历数组 4.绑定数据 5.多个app功能模块的实现 <!doctype html><h ...

  5. [LeetCode] Maximum Average Subarray I 子数组的最大平均值

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...

  6. 跨域访问 - 跨域请求 同源策略概念对跨域请求的影响 及几种解决跨域请求的方法如 jsonp

    为什么会设置同源策略 > 适用于浏览器的一种资源访问策略 > 同源策略(Same origin policy)是一种约定,它是浏览器最核 心也最 基本的安全功能,如果缺少了同源策略,则浏览 ...

  7. 解决:GitHub 远程端添加了 README.md 文件后,本地 push 代码时出现错误

    一.错误描述 To github.com:compassblog/PythonExercise.git ! [rejected] master -> master (fetch first) e ...

  8. python的变量与赋值

    1.变量的命名规则 变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错.下面总结了一下变量的命名规则: 1.不 ...

  9. 再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量

    我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使 ...

  10. [AHOI 2012]树屋阶梯

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...