使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
2015-08-13 10:41
316 查看
回顾历史
发布SNAPSHOT版本的问题
解决问题
完整脚本
使用方法
本文原创。
转载请注明CSDN博客出处:
http://blog.csdn.net/maosidiaoxian/article/details/47608573
在以前我发过一篇 使用Gradle发布Android开源项目到JCenter ,但随后发布SNAPSHOT版本却折腾了好久没弄出来,而昨晚在参考了两篇博客后终于成功。
但是在当时却导致了Android Studio里编译失败,理由是没有
后来找到了一个迂回的方法,那就是使用
即,使用
这里可以参考gradle-publish项目上的build.gradle文件。
还有,发布SNAPSHOT版本的时候,在配置里的版本名称应该是xxx.xxx.xxx-SNAPSHOT,执行
另外就是建议把bintray.gradle文件拷到项目中使用。
如果使用过程有问题,欢迎在我的项目中提issue。
发布SNAPSHOT版本的问题
解决问题
完整脚本
使用方法
本文原创。
转载请注明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。
相关文章推荐
- 用Dotfuscator对dll混淆
- Android 屏幕适配方案
- Apache2.2+Tomcat7.0集群 完美攻略
- 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
- eclipse js提醒报错
- 024找到二维阵列(keep it up)
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
- 如何教你在NIPS会议上批量下载历年的pdf文档(另附04~14年NIPS论文下载链接)
- C/C++之全局、static对象/变量的初始化问题
- C/C++之内存对齐
- usb driver编写 (转)
- java socket初步学习一 ( tcp)
- ios-代理模式 协议小结
- Android 下拉列表框(spinner)
- Android中 在开启的多个Activity中关闭特定的Activity的方法
- eclipse下载并配置黑色主题
- 生成SQL查询条件的工具类
- JAVA 网络编程-udp , url
- 修改Android studio背景主题
- nginx配置文件中的location详解