将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. DockManager 如何快速隐藏DockPanel z

    DockPanel在点击hide按钮时候如果鼠标不离开的话,panel还是没隐藏,某种情况下这种现象着实让人不爽,而且当鼠标离开后默认是很缓慢的隐藏 AutoHideSpeed不设置也可以,主要设置H ...

  2. 仿LOL项目开发第七天

    仿LOL项目开发第七天 by 草帽 不知不觉已经写到了第七篇这种类型的博客,但是回过头看看之前写的,发现都只能我自己能看懂. 我相信在看的童鞋云里雾里的,因为我基本上没怎么详细讲一个脚本怎么用?但是你 ...

  3. Coursera课程python中的一些程序

    Index of /code Name Last modified Size Description Parent Directory - BeautifulSoup.py 07-Aug-2015 1 ...

  4. Coursera课程《Python数据结构》中课程目录

    Python Data Structures Python Data Structures is the second course in the specialization Python for ...

  5. 局部敏感哈希 Kernelized Locality-Sensitive Hashing Page

    Kernelized Locality-Sensitive Hashing Page   Brian Kulis (1) and Kristen Grauman (2)(1) UC Berkeley ...

  6. 分布式缓存系统Memcached在Asp.net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统.用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来降低读取数据库的次数,从而提高动态.数据库驱动站点的速度. Memcache ...

  7. OpenStreetMap地图数据介绍(转)

    原文链接:每日一读 Packtpub.OpenStreetMap(1) 相信绝大多数人都知道Wiki,但要提起地图,大家第一反应肯定是Google地图.在没看这本书之前,还真不知原来还有OpenStr ...

  8. Informatica 常用组件Lookup之二 已连接和未连接的查找

    可以配置一个已连接的查找转换,以从映射管道中直接接收输入:您也可以配置一个未连接的查找转换,以从其它转换的表达式结果中接收输入. 已连接的查找 未连接的查找 直接从管道接收输入值. 从其它转换的 :L ...

  9. Informatica 常用组件Source Qualifier之八 会话前和会话后 SQL

      可以在源限定符转换的"属性"选项卡中添加会话前和会话后 SQL 命令.您可能要使用会话前 SQL 以在会话开始时将时间标识行写入源表. PowerCenter 在读取源之前对源 ...

  10. sql server 将字符串分割成表函数 strsplitetotable

    在sql server里,调用存储过程时,经常需要将数据拼成字符串做为参数调用存储过程,而在储存过程中分割字符串虽然简单但麻烦,封装了该函数,可以将拼串分割成内存表返回,方便使用,返回的表字段从a,b ...