将Gradle项目公布到maven仓库

1 Gradle简单介绍

1.1 Ant、Maven还是Gradle?

1.1.1 Ant和Maven介绍

全称为Apache Maven,是一个软件(特别是Java软件)项目管理及自己主动构建工具,由Apache软件基金会所提供。

 在公布maven之前,android普遍使用ant的方式进行项目的构建和管理。它们均使用XML文件来配置描写叙述项目的,相比較于ant maven提供的功能更加强大。

主要表如今以下几点:

- 使用POM的方式来管理和描写叙述项目

- 内置了很多其它的隐式规则,使得构建文件更简单

- 内置了软件构建的生命周期

- 内置了依赖管理来和Repository来实现依赖管理

 然而在一些中大型项目中使用Maven方式构建软件会让XML配置文件越来越大。越来越笨重。并且灵活性不够。因此,出现了gradle.

1.1.2 Gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自己主动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置。

 非常明显。Gradle的出现是为了弥补ant和maven构建方式的不足。它不是採用传统的xml文件构建方式,而是採用groovy方式来构建。详细映射到android中就是使用gradle脚本文件的构建方式。它贯穿了项目的整个生命周期,包含编译、检查、測试、打包、部署。

 因此。google将gradle方式作为了android项目管理的默认方式,使用android studio创建的项目以下会默认生成build.gradle文件作为默认构建。

很多其它的android Gradle介绍请看:

- gradle-android

- wikipedia-gradle介绍

- ant\maven\gradle比較

1.2.常见的Maven仓库和Gradle依赖的使用

 在使用ant构建项目的时候我们要使用第三方库往往要下载相应的库并将其jar文件复制到项目文件夹以下,这样会显得非常麻烦。在使用gradle构建方式以后我们仅仅要须要一个坐标就能够引入项目库文件,比如:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
}

 这个就是gradle依赖使用方式。所谓的gradle依赖就是我们提供一个坐标然后它会自己主动帮我们从网络上下载相应的文件,甚至我们能够在本地看到库文件的源代码。

那我们究竟是从哪里下载到相应的文件呢?我们通过跟踪项目文件顶级文件夹以下的buidle gradle文件:

allprojects {
repositories {
jcenter()
}
}

jcenter函数:

   /**
* Adds a repository which looks in Bintray's JCenter repository for dependencies.
* <p>
* The URL used to access this repository is {@literal "https://jcenter.bintray.com/"}.
* The behavior of this repository is otherwise the same as those added by {@link #maven(org.gradle.api.Action)}.
* <p>
* Examples:
* <pre autoTested="">
* repositories {
* jcenter()
* }
* </pre>
*
* @return the added resolver
* @see #jcenter(Action)
*/
MavenArtifactRepository jcenter();

 我们知道我们的包是从一个叫做Bintray’s JCenter repository中下载而来的,我们打开jcenter库试试,

 看到了我们常见的一些库,这样我最终搞清楚gradle依赖是从哪里来的了。

 其实,这个Jcenter库是一家叫做bintray的机构维护,它作为google android官方默认的中央库.但在android studio的早期版本号中默认使用的是maven库,它是由sonatype机构维护的。眼下主要存在的三个依赖库为:

库名 维护机构 android studio调用
jcenter bintray jcenter()
maven sonatype mavenCentral()
lvy sonatype //一般在ant中使用

三者都是基于Apache Maven的规则来进行依赖。

1.3 aar库文件

 aar文件其实和jar文件作用是一样的,唯一的差别在于aar是专门针对android项目优化过的jar文件。里面除了jar以外还包含了res\string等资源文件。

2 将项目公布到Jcenter Maven仓库中

2.1 公布Jcenter步骤

2.1.1 注冊bintray帐号

 为了让自己的项目也能够被全世界的开发人员使用,我们能够通过将lib项目公布到jcenter库中,在配置脚本之前我们须要先去官网注冊一个帐号,传送门:bintray 也能够使用第三方登录的方式来登录,包含github、google、facebook帐号等。注冊成功后我们先要获取到一个api key。

2.1.2 上传文件

 在Jcenter库中要求上传到库中的项目必须包含4个文件:

  - javadoc.jar

  - sources.jar

  - aar或者jar

  - pom

 假设少了审核可能不会通过。当然这几个文件都可一通过配置gradle脚本来自己主动生成。

2.2 配置Gradle脚本

 为了创建上面所说的几个文件,我们须要构建脚本来自己主动生成相应的文件。

详细能够參考:github-SwipeView-build.gradle

2.2.1 配置项目依赖

将项目文件根文件夹(Top-level)以下的buide.gradle文件添加依赖:

 dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

注意: classpath ‘com.android.tools.build:gradle:1.0.0’ 在默认生成的文件下可能版本号不一致。採用默认的有时候会导致构建失败。最好也改动成1.0.0版本号的。

2.2.2 添加gradle插件和版本号号

 在须要上传的library项目的build.gradle下添加插件引用和版本号号:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
version = "1.0"

注意:版本号号作为项目坐标的一部分。以后在升级项目的时候都须要升级版本号号,否则会覆盖掉已经上传的版本号.

 关于插件bintray的更详细的使用方式能够查看:github-bintray

2.2.3 pom节点生成

 生成POM文件build脚本

def siteUrl = 'https://github.com/daliyan/SwipeView'      // 项目的主页
def gitUrl = 'https://github.com/daliyan/SwipeView.git' // Git仓库的url
group = "akiyama.swipe"
// 根节点加入
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'swipeView For Android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'akiyama'
name 'daliyan'
email 'dali_yan@yeah.net'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}

注意:group = “akiyama.swipe”作为项目坐标的前缀。packaging ‘aar’ 为arr包,其它的自己任意填写。

2.2.4 javadoc和sources文件的生成

 加入生成任务:

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
}

注意:在构建生成的时候有可能会报GBK编码等错误,可能须要加入UTF-8声明。例如以下:

//加入UTF-8编码否则凝视可能JAVADOC文档可能生成不了
javadoc {
options{
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title "swipeJavaDoc"
}
}
2.2.5 构建上传jecnter库中脚本

 使用前面的我们注冊帐号和apikey上传相应的文件到jcenter库中:

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "maven"
name = "swipeView" // project name in jcenter
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}

 由于用户名和apikey是属于个人的隐私信息。故在local.properties(该文件不会上传到git库中)本地文件里配置用户名和apikey

sdk.dir=/home/android-sdk
bintray.user=your username
bintray.apikey=your apikey

2.3 上传和审核

在配置好了上述build.gradle文件后我们打开gradle控制面板就能看到如图所看到的的构建任务:

我们仅仅须要双击bintrayUpload就能自己主动上传到jcenter库中了。

到官网找到我们刚刚上传的文件。提交审核即可了(别跟我说你找不到),一般2-3个小时就能审核成功。

成功后能够通过http://jcenter.bintray.com/ 查询到你的库文件,比如我的项目文件路径为:http://jcenter.bintray.com/akiyama/swipe/library/2.1

2.4 同步项目到mvnrepository

在jcenter中提供了将项目同步到mvnrepository库中,这样就不须要操作上传到mvnrepository库的繁琐步骤。在bintray构建脚本最后加上:

 //Optional configuration for Maven Central sync of the version
mavenCentralSync {
sync = true //Optional (true by default). Determines whether to sync the version to Maven Central.
user = 'userToken' //OSS user token
password = 'paasword' //OSS user password
close = '1' //Optional property. By default the staging repository is closed and artifacts are released to Maven Central. You can optionally turn this behaviour off (by puting 0 as value) and release the version manually.
}

注意:user和password即为mvnrepository中注冊的username与password。

假设同步成功你也能够通过http://mvnrepository.com/ 查询到你上传的lib项目

2.5 常见问题

在构建脚本过程中可能会出现一些问题:

- GBK编码问题。前文已经提供了解决方式;

- 依赖库问题,可能会报告一些警告。仅仅要保证最后构建成功,直接忽略即可;

- gradle依赖问题:能够參照githug-bintray 解决方式:

Gradle >= 2.1

plugins {
id "com.jfrog.bintray" version "1.3.1"
}

Gradle < 2.1

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.3.1'
}
}
apply plugin: 'com.jfrog.bintray'

3 小结

本文学习了gradle的一些基本知识和主要的构建,学习了怎样将lib库上传到中央仓库中,以及在这个过程中可能遇到的问题。

将Gradle项目公布到maven仓库的更多相关文章

  1. 把自己的项目发布到maven仓库并在maven和gradle中开始使用

    把自己的项目发布到maven仓库并在maven和gradle中开始使用 上一条博客中提到的日志打印项目总算是维护的差不多了, 不过现在使用它还是打成jar包放到其他项目内, 所以决定把项目传到mave ...

  2. 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例

     1 若想让maven项目依赖另外一个maven项目.被依赖的项目要在maven仓库中有对应的jar包,所以要对依赖的项目运行mvninstall命令. 2 新建第二个项目模块HelloFrien ...

  3. 给 Gradle 配置国内的 Maven 仓库,提高 jar 包下载速度。

    最近使用 gradle 跑一些 spring 的示例,在下载一些 jar 的时候速度特别慢,因为是访问的国外的 maven 仓库. 开源中国提供了国内的 maven 库,所以可以在 gradle 里设 ...

  4. 将Gradle项目发布到Maven Central库中

    本文主要介绍如何一个由gradle构建的项目部署到Maven Central. 网上大部分都是介绍如何将由maven构建的项目部署到Maven Central.与Gradle相关的比较少. 申请账号 ...

  5. gradle 项目转成maven项目

    找到一个个子项目目录下的build.gradle文件,在文件开头添加以下内容: apply plugin: 'java' apply plugin: 'maven' compileJava.optio ...

  6. 从零开始把项目发布到maven仓库中心

    sonatype准备操作 注册账号 https://issues.sonatype.org 1. 密码符号规范,并且工记住 新建项目 1. group id 如果你有com域名的所有权可以直接使用,如 ...

  7. Gradle使用国内的maven仓库

    本文转载自:https://www.cnblogs.com/yoyotl/p/6291703.html 感谢阿里云! 找到gradle的配置文件路径,例如Windows中的路径为C:\Users\${ ...

  8. spring boot 项目打包到maven仓库供其它模块使用

    在对spring boot项目进行打包发布的时候发现其它spring boot项目服务真正引用使用该spring boot包中的类 需对打包插件做如下修改: <build> <plu ...

  9. 使用gradle插件发布项目到nexus中央仓库

    目录 简介 Gradle Nexus Publish Plugin历史 插件的使用 Groovy DSL Kotlin DSL 插件背后的故事 总结 简介 Sonatype 提供了一个叫做开源软件资源 ...

随机推荐

  1. windowsmobile 开发环境

    Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...

  2. Selenium2+python自动化35-获取元素属性

    前言 通常在做断言之前,都要先获取界面上元素的属性,然后与期望结果对比.本篇介绍几种常见的获取元素属性方法. 一.获取页面title 1.有很多小伙伴都不知道title长在哪里,看下图左上角. 2.获 ...

  3. cout的输出格式初探

    在C++中,cout代表的是标准输出设备,即显示器,相对于C语言中所使用的printf函数,cout显得更为灵活.下面以30.300和1024三个数为例子,简单说明cout输出时所选格式的输出.cou ...

  4. 最大熵,熵,MLE的解释,还行

    这篇文章: https://blog.csdn.net/jiaoyangwm/article/details/81276921

  5. JavaScript之深浅拷贝

    数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice.concat 返回一个新数组的特性来实现拷贝.比如: , true, null, undefined]; var new_arr ...

  6. Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)

    解题报告 意思就是说有n行柜子,放奖杯和奖牌.要求每行柜子要么全是奖杯要么全是奖牌,并且奖杯每行最多5个,奖牌最多10个. 直接把奖杯奖牌各自累加,分别出5和10,向上取整和N比較 #include ...

  7. Android -- SlidingMenu

    实现原理 在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以 ...

  8. 简单账本-用完即走的微信小程序

    作为一个记账强迫症患者,对当前手机中的记账App都不太满意.这类软件越来越臃肿,越来越慢,启动要半天.联网同步要半天,进入界面又有一堆新功能要介绍.好不容易开始记账,又得各种高大上的选择设定,一笔帐下 ...

  9. python多线程概念

    转自:http://www.cnblogs.com/fnng/p/3489321.html 在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制( ...

  10. linux下mysql-5.5.15安装详细步骤

    linux下mysql-5.5.15安装详细步骤 注:该文档中用到的目录路径以及一些实际的值都是作为例子来用,具体的目录路径以各自安装时的环境为准 mysql运行时需要一个启动目录.一个安装目录和一个 ...