[Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服
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 parameterspom {//pom信息project {packaging 'aar'// Add your description herename 'novate'url siteUrl// Set your licenselicenses {//开源协议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 gitUrldeveloperConnection gitUrlurl siteUrl}}}}}
6 输出资源
task sourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier = 'sources'}task javadoc(type: Javadoc) {source = android.sourceSets.main.java.srcDirsclasspath += project.files(android.getBootClasspath ().join(File.pathSeparator))}task javadocJar(type: Jar, dependsOn: javadoc) {classifier = 'javadoc'from javadoc.destinationDir}artifacts {archives javadocJararchives 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_NAMEgroupId PROJ_GROUPIDartifactId PROJ_ARTIFACTIDpackaging 'aar'}}
}
当然密码可以加载jcenter公用的那个properties文件中,防止上传的代码git上,然后运行as命令,或点击下面这个task即可。![这里写图片描述](https://img-blog.csdn.net/20161118225410240)
发布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域名
默认账户密码是:
adminadmin123
配置仓库
点击左侧 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
作者:Tamic 更多原创关注开发者技术前线
[Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服相关推荐
- [Gradle系列]Gradle打包apk多版本,多渠道,多环境,多功能,多模块随心所欲
Tamic: http://blog.csdn.net/sk719887916/article/details/53411771 开始 上篇Gradle发布Module(Maven)到jcenter, ...
- 如何发布开源库到jcenter
2019-11-04 22:24:26 文章目录 准备 上传到bintray 发布到jcenter 最近学习了一下Annotation和APT,简单的写了个库,想要发布到公共仓库供大家使用(虽然没人用 ...
- 教你一步步发布一个开源库到 JCenter
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 今天想来分享下,如何一步步自己发布一个开源库到 JCenter 这方面的博客网上已经特别多了,所以本篇并不打算仅仅只是记录流程步骤而 ...
- Gradle 发布共享库——如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库
作为一个码农,我们开发了很多项目,也积累了很多自己的通用依赖库,这些都是我们的项目积累,那么我们该如将自己的依赖库方便的集成到以后的项目开发中,或者共享给比人使用呢? 是直接在后面的项目中通过依赖模块 ...
- Gradle 发布共享库——如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
Gradle 发布共享库--如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库 上一篇博文Gradle 发布共享库--如何通过Gradle发布java依赖库(jar)到 ...
- 华为今年不发布Mate系列新机;一加宣布与OPPO合并:将成为OPPO旗下独立品牌;Gradle 7.1 发布|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- 华为今年不发布Mate系列新机;一加宣布与OPPO合并:将成为OPPO旗下独立品牌;Gradle 7.1 发布|极客头条
一分钟速览新闻点! 荣耀回应未来是否会使用HarmonyOS系统:目前使用安卓 会关注鸿蒙发展 团队全面融合,一加将成为 OPPO 旗下独立品牌 华为今年不发布 Mate 系列新机 小米开源委员会主席 ...
- Gradle实战:发布aar包到maven仓库
查看原文:http://blog.csdn.net/u0108184... Gradle实战系列文章: <Gradle基本知识点与常用配置> <Gradle实战:Android多渠道 ...
- 一步一步教你在JCenter发布开源库
本文由玉刚说写作平台提供写作赞助,版权归玉刚说微信公众号所有 原作者:Mr.s(猪_队友) 版权声明:未经玉刚说许可,不得以任何形式转载 想必大家都用过这样的或者那样的依赖吧. compile 'co ...
最新文章
- c语言程序设计数据输入的,1.2 C语言的发展与特点免费阅读_C语言程序设计教程免费全文_百度阅读...
- map平均准确率_MAP(Mean Average Precision)
- 报告:采用人工智能并不意味着成功
- 《R语言游戏数据分析与挖掘》一导读
- java中jtansforms,Java3D中的viewplatform的旋转
- SAP 电商云 Spartacus UI 的 CORS 设置
- c++ 经典代码_C语言经典100题(31)
- 神经网络算法 java 源代码_神经网络算法与实现 ——基于Java语言 代码实例
- 如何生成 Flink 作业的交互式火焰图?
- Linux Shell脚本专栏_批量主机远程执行命令脚本_08
- 阿里云96页报告详解《云上转型》(10个案例、10大趋势/完整版PPT)
- 【免费毕设】基于PHP实现的网上留言管理系统的设计(源代码+论文)
- 腾讯校园招聘笔试 2019-8-17 第三题
- python之路-基础篇-002
- discuz论坛引入iframe
- 首次 golang爬虫插件gocolly/colly 使用经历
- 计算机的excel的知识,计算机基础知识excel题「附答案」
- 最长公共子串——python
- android 蒙版控件,Android开发UI之给ImageView添加蒙版
- 真的来了!IO-Link无线-释放传感器/执行器巨大潜力的工业无线解决方案,设备远程监控新选择!(Part 3)
热门文章
- pytorch入门使用及前置知识(2)NLP
- java计算机毕业设计课堂互动应答系统mp4MyBatis+系统+LW文档+源码+调试部署
- .net core 给图片流加水印
- Java面试题(二十)面试经验分享
- Ackerman阿克曼(后驱动)前轮舵机转向后轮电机驱动移动平台的建模及控制算法
- 02 A33 Android系统源码编译
- 最新科学研究显示,首尔半导体SunLike系列自然光谱LED可提升视觉舒适感、日间警觉性、情绪和睡眠深度
- CentOS7/Linux部署Apusic金蝶中间件及使用
- canvas炫酷3d网页背景动画js特效
- 计算机时间更改不了,电脑时间不能修改怎么办【图解】