将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. Selenium2+python自动化29-js处理多窗口

    前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没 ...

  2. 机器学习实战:用nodejs实现人脸识别

    机器学习实战:用nodejs实现人脸识别   在本文中,我将向你展示如何使用face-recognition.js执行可靠的人脸检测和识别 . 我曾经试图找一个能够精确识别人脸的Node.js库,但是 ...

  3. 物联网(IoT)的11大云平台:AWS、Azure、谷歌云、Oracle、

    物联网(IoT)的11大云平台:AWS.Azure.谷歌云.Oracle. 2018-11-06 14:02 云技术 关键词:物联网AzureGoogleSalesforce云计算 导读:现在,我们将 ...

  4. linux进程、调度、线程、进程上下文等几点理解

    1.信号来自进程或内核 2.线程共享进程的代码空间和数据空间(全局变量或静态变量),文件描述符,信号,以及malloc分配的内存,每个线程拥有独立的栈空间和程序计数器,在创建线程时,调用pthread ...

  5. 支持按行号区域文本选择的NotePad++插件开发

    近期发现NotePad++不支持按行号区间的文本复制,就想自己动手开发一个NotePad++插件,支持输入起始行号和结束行号,然后复制该区域的文本到新文档或者拷贝到系统剪切板,方便文本的操作. 效果例 ...

  6. GoLang中flag标签使用

    正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包.在 Golang 语言中也为我们提供了相应 ...

  7. Mac下开启与关闭端口转发的脚本配置方法

    一.依次运行以下命令: cd /etc ls | grep pf.conf sudo cp pf.conf pf.conf.normal.bak sudo cp pf.conf pf.conf.tra ...

  8. 微信小程序开发及相关设置小结

    今年过年,主要看了<奇葩说>和<电锯惊魂>,很不错,好东西的确需要留出足够的时间来看,匆匆忙忙走马观花是对作者的不尊重.除此之外,就是研究了一下微信小程序开发,先说对小程序的看 ...

  9. VS2008:Failed to return new Code Element

    VS2008添加自动化类,报错:   [解决方法1] This can be fixed by installing SP1. Please see  https://connect.microsof ...

  10. [NPM] Use npx to run commands with different Node.js versions

    We will use npx to run a package using different versions of Node.js. This can become valuable when ...