使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
本文原创。
转载请注明CSDN博客出处:
http://blog.csdn.net/maosidiaoxian/article/details/47608573
在以前我发过一篇 使用Gradle发布Android开源项目到JCenter ,但随后发布SNAPSHOT版本却折腾了好久没弄出来,而昨晚在参考了两篇博客后终于成功。
回顾历史
在发布 aar 到JCenter的时候,一开始指定上传文件的时候是使用publications,然后使用bundleRelease任务的输出做为aar的artifact。
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
artifact javadocJar
artifact sourcesJar
artifact bundleRelease
//省略
}
}
}
bintray {
user = BINTRAY_USER
key = BINTRAY_KEY
publications = ['mavenJava']
// 省略
}
但是在当时却导致了Android Studio里编译失败,理由是没有bundleRelease这个属性(或任务)。其原因是,这个任务一开始的时候是没有的,是在分析计算了build.gradle之后才创建的。
后来找到了一个迂回的方法,那就是使用artifacts方法来把源码和注释的jar包添加到artifact中,然后上传的时候publications和configurations一起用。如下:
artifacts {
archives javadocJar
archives sourcesJar
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
// 省略
}
}
bintray {
user = BINTRAY_USER
key = BINTRAY_KEY
configurations = ['archives']
publications = ['mavenJava']
//省略
}
发布SNAPSHOT版本的问题
首先参考了这篇博客,知道如何传上SNAPSHOT版本到oss.jfrog.org(JCenter是不支持SNAPSHOT版本的)。但是这里却只能用publications而不像bintray那样有configurations。
artifactory {
contextUrl = 'http://oss.jfrog.org/artifactory'
resolve {
repository {
repoKey = 'libs-release'
}
}
publish {
repository {
repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to
username = bintray.user
password = bintray.key
maven = true
}
defaults {
//这里的名字和上面红色的名字一致即可,会将其包含的输出上传到jfrog上去
publications('mavenJava')
publishArtifacts = true
}
}
}
解决问题
于是只能再次面对以前那个问题,那就是怎么解决打包输出aar并加到mavenJava的配置中。先是找到一个github上的issue,老外用指定的文件路径来添加。stackoverflow上也有不少类似的答案。但这并不是我想要的,因为这样的指定并不灵活,而且也没有对打包aar的任务形成依赖,所以最后还是回归到如何解决在配置中添加bundleRelease的问题上。google之后,终于在小日本的这篇博客找到答案:
afterEvaluate {
publishing.publications.aar.artifact(bundleRelease)
publishing.publications.jar.artifact(packageReleaseJar)
}
即,使用afterEvaluate,在这里的闭包中进行添加。因为在这个时候,已经有bundleRelease这个任务了。
完整脚本
完整脚本如下:
group = PROJ_GROUP
version = PROJ_VERSION
project.archivesBaseName = PROJ_ARTIFACTID
apply plugin: 'com.jfrog.bintray'
apply plugin: "com.jfrog.artifactory"
apply plugin: 'maven-publish'
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += configurations.compile
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
javadoc {
options{
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title PROJ_ARTIFACTID
}
}
def pomConfig = {
licenses {
license {
name "The Apache Software License, Version 2.0"
url "http://www.apache.org/licenses/LICENSE-2.0.txt"
distribution "repo"
}
}
developers {
developer {
id DEVELOPER_ID
name DEVELOPER_NAME
email DEVELOPER_EMAIL
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
artifact javadocJar
artifact sourcesJar
pom{
packaging 'aar'
}
pom.withXml {
def root = asNode()
root.appendNode('description', PROJ_DESCRIPTION)
root.children().last() + pomConfig
}
}
}
}
afterEvaluate {
publishing.publications.mavenJava.artifact(bundleRelease)
}
bintray {
user = hasProperty("bintrayUser")?getProperty("bintrayUser"):getProperty("BINTRAY_USER")
key = hasProperty("bintrayKey")?getProperty("bintrayKey"):getProperty("BINTRAY_KEY")
publications = ['mavenJava']
publish = true
pkg {
repo = 'maven'
name = PROJ_NAME
desc = PROJ_DESCRIPTION
websiteUrl = PROJ_WEBSITEURL
issueTrackerUrl = PROJ_ISSUETRACKERURL
vcsUrl = PROJ_VCSURL
licenses = ['Apache-2.0']
publicDownloadNumbers = true
}
}
artifactory {
contextUrl = 'http://oss.jfrog.org/artifactory'
resolve {
repository {
repoKey = 'libs-release'
}
}
publish {
repository {
repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to
username = bintray.user
password = bintray.key
maven = true
}
defaults {
//这里的名字和上面红色的名字一致即可,会将其包含的输出上传到jfrog上去
publications('mavenJava')
publishArtifacts = true
}
}
}
使用方法
使用方法与之前的一样,这里不多赘述。稍有区别的是,在build.gradle中需要添加多一个依赖:
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
这里可以参考gradle-publish项目上的build.gradle文件。
还有,发布SNAPSHOT版本的时候,在配置里的版本名称应该是xxx.xxx.xxx-SNAPSHOT,执行gradle artifactoryPublish就可以发布上去了。如果要使用,需要声明以下仓库:
maven { url "http://oss.jfrog.org/oss-snapshot-local/" }
另外就是建议把bintray.gradle文件拷到项目中使用。
如果使用过程有问题,欢迎在我的项目中提issue。
使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)的更多相关文章
- [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服
Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 前言 andorid开发者经常会看到xx公司发布了xx项目,xx ...
- Android拓展系列(12)--使用Gradle发布aar项目到JCenter仓库
目的 发布自己的android library(也就是aar)到公共的jcenter仓库,所有的人都能用gradle最简单的方式引用. 为什么选择jcenter,它兼容maven,而且支持更多形式仓库 ...
- 理解Maven中的SNAPSHOT版本和正式版本
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- Maven中的SNAPSHOT版本和正式版本理解
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- Android studio 使用Gradle发布Android开源项目到JCenter 总结
1.注册账号 先到https://bintray.com注册一个账号. 这个网站支持 github 账户直接登录的 2.获取 bintray.user 和 bintray.apikey ...
- [转]使用Gradle发布Android开源项目到JCenter
转自:http://blog.csdn.net/maosidiaoxian/article/details/43148643 使用Gradle发布Android开源项目到JCenter 分类: G ...
- 如何在Android Studio中使用Gradle发布项目至Jcenter仓库
简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...
- 使用Gradle发布Android开源项目到JCenter
喜欢做些开源项目的朋友,相信有不少人都希望能把自己的项目发布到公共的中央仓库,如maven中央仓库,以供别人方便地集成使用.而使用了Android Studio的同学,应该也对gradle和jcent ...
- 使用Gradle发布项目到JCenter仓库 (转载)
原文:使用Gradle发布项目到JCenter仓库 这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛.JCenter现在是Android Stu ...
随机推荐
- SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决
一个SpriteKit项目在其他设备上运行都无问题(无论是真机或是模拟器),但是在iPhone6 Plus上会出现精灵对象纹理被过度放大的现象: 从上图中大家可以看到无论是主角或是道具球都过大了. 看 ...
- 有N个数,组成的字符串,如012345,求出字串和取MOD3==0的子串,如012 12 123 45。
#include <iostream> using namespace std; int getSum(string str, int begin, int len) { int sum ...
- Windows上C语言实现设置控制台的颜色
这里设置只要调用system();这个函数就行了,参数是字符串,想要设置终端的颜色,按照以下格式可以设置: //数字表示前景色,字母表示背景色 //color 0=黑色 1蓝色 2 绿色 3湖蓝色 4 ...
- JQuery之事件处理
JQuery不支持捕获模型 冒泡模型解析 <body> <div> <input id="bntShow" type="button&quo ...
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrom ...
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(三):素材最终解决方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- Git版本控制:Git高级教程
http://blog.csdn.net/pipisorry/article/details/50669350 Git有很多命令行参数,使用起来非常方便.可以运行 man git log ,来看一下这 ...
- 手机广告投放(phone advertising)唯一标识
手机标示,为了识别用户,方面advertising. 使用设备id,相当于暴露用户隐私.慢慢已不允许使用.. (长时间跟踪用户无异于暴露用户隐私,虽然大量数据适合兴趣建模,广告个性化推荐.但复杂多样会 ...
- Linux IPC实践(3) --具名FIFO
FIFO具名/命名管道 (匿名)管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信. 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道;命 ...
- Android 纵向跑马灯滚动效果
像淘宝和京东都会有跑马灯的效果,今天给大家贡献下以前项目的一个demo,各位看官,且看效果图. 我们先定义一个Bean文件,这个实体类文件主要包含标题,内容描述,以及还有跳转的链接. LampBean ...