将Gradle项目公布到maven仓库

将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 ‘[email protected]‘
                    }
                }
                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库上传到中央仓库中,以及在这个过程中可能遇到的问题。

时间: 2024-11-03 21:37:38

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

Gradle使用国内的maven仓库

Gradle使用国内的maven仓库 感谢阿里云! 找到gradle的配置文件路径,例如Windows中的路径为C:\Users\${你的用户名}\.gradle 新建一个文件名为init.gradle,用记事本或者类似的编辑器打开,输入以下内容: 1 allprojects{ 2 repositories { 3 def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' 4 all { Artifac

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

 1 若想让maven项目依赖另外一个maven项目,被依赖的项目要在maven仓库中有相应的jar包,所以要对依赖的项目执行mvninstall命令. 2 新建第二个项目模块HelloFriend目录及约定的目录结构 HelloFriend --src -----main ----------java ----------resources -----test ---------java ---------resources --pom.xml 3 在项目HelloFriend根目录建立p

[Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库

======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:github.com/qiujuer/Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131 --学之开源,用于开源:初学者的心态,与君共勉! =============

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

最近使用 gradle 跑一些 spring 的示例,在下载一些 jar 的时候速度特别慢,因为是访问的国外的 maven 仓库. 开源中国提供了国内的 maven 库,所以可以在 gradle 里设置一下,提供访问速度.在 build.gradle 文件中添加: buildscript { repositories { maven { url "http://maven.oschina.net" } mavenLocal() mavenCentral() } } “http://ma

gradle项目转成maven项目

gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项目目录结构保持跟maven一样的约定,即/src/main/java这一套. 在build.gradle中增加以下内容(group,version可自行修改,artifactId默认为目录名称) apply plugin: 'java'apply plugin: 'maven' group = 'com.1

将Gradle项目发布到Maven Central库中

本文主要介绍如何一个由gradle构建的项目部署到Maven Central. 网上大部分都是介绍如何将由maven构建的项目部署到Maven Central.与Gradle相关的比较少. 申请账号 前往 sonatype申请账号. 申请完,Create Issue. 按照这个模板填. 这一块比较简单,网上教程也比较多. Create Issue结束后,官方会需要你证明你拥有相对应的domain. 证明有以下3个途径: Add a TXT record to your DNS referenci

gradle 项目转成maven项目

找到一个个子项目目录下的build.gradle文件,在文件开头添加以下内容: apply plugin: 'java' apply plugin: 'maven' compileJava.options.encoding = 'UTF-8' compileTestJava.options.encoding = 'UTF-8' group = 'com.wonhigh' version = '4.2.7-RELEASE' sourceCompatibility = 1.7 task writeN

Maven学习笔记(三)——Maven仓库(Repositories)、基础命令(二)&amp;自动构建项目

前言 上篇blog介绍了maven最基础的一些核心概念,包括maven项目约定的目录结构.maven核心配置文件--pom.xml文件的解析以及3个基本的maven命令(compile.test.package),本篇blog将继续介绍剩余的maven命令,还会涉及到maven最重要的概念之一--Maven仓库,最后会学习如何通过maven自动构建java项目/javaweb项目以及自动构建可供选择的项目骨架. Maven仓库(Repositories) 本来打算继续学习剩余的maven命令,但

[Publish AAR To Maven] 注册 Maven 仓库 sonatype.org 账户

本篇文章隶属于 <使用 Gradle 发布 AAR 到 Maven 仓库> ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:github.com/qiujuer/Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195199