现在的位置: 首页 > 编程技术 > Android > 正文

Gradle发布项目到Jcenter

2016年08月25日 Android ⁄ 共 3797字 ⁄ 字号 Gradle发布项目到Jcenter已关闭评论 ⁄ 阅读 613 次

Gradle发布项目到 Maven / Jcenter

自己写了一些工具类,每次用的时候都要导入一个 Module 感觉有点麻烦,就想把项目发布到 Jcenter 上,方便自己使用,同时别人也可以拉下来使用。 经过一天的采坑,终于把项目发不上去了。在这里总结一下遇到的坑。
发布项目到 Maven/Jcenter , 网上教程一大堆。但是真正到用的时候发现使用的一些插件和依赖都过时了,不能使用了。

下面记录一下发布的流程吧

  1. 首先注册Bintray账号,不注册账号发布到哪里去啊。点击这里去注册
  2. 登陆之后拿到两个参数 一个是你的用户名,一个是api key (这个在你的个人信息里面有);
  3. 然后重点来了 ,先看一下我的项目结构。需要注意的三个地方我都给了标记。下面我们关注这三个文件就可以了。JLibary 就是我们要发布的库文件。Gradle发布项目到Jcenter
  4. 首先我们在项目的 build.gradle 文件中添加两个依赖
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
    

    这里注意了,在 Gradle 之前的版本确实是这样写的,但是 gradle 工具升级了之后, 这样写是不对的。>>> 可以参见这里

    按照官方模板写之后: 项目最外层的 build.gradle 文件现在就是这个样子:

    buildscript {
    repositories {

    jcenter()
    

    }
    dependencies {

    classpath 'com.android.tools.build:gradle:2.1.3'
    

    }
    }

    plugins {
    id “com.jfrog.bintray” version “1.7”
    id “com.github.dcendents.android-maven” version “1.5”
    }

    allprojects {
    repositories {

    jcenter()
    

    }
    }

    task clean(type: Delete) {
    delete rootProject.buildDir
    }

  5. 然后我们配置 Module 里面的 build.gradle ,就是第一条红线标示出来的地方。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    apply plugin: 'com.android.library'
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    def siteUrl = 'https://github.com/ovwvwvo/JLibary' ****
    def gitUrl = 'https://github.com/ovwvwvo/JLibary.git' ****
    group = "cn.ovwvwvo.android" ****
    version = "0.1.0" ****
    android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    resourcePrefix "****"
    defaultConfig {
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    lintOptions {
    abortOnError false
    }
    }
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    }
    install {
    repositories.mavenInstaller {
    // This generates POM.xml with proper parameters
    pom {
    project {
    packaging 'aar'
    name '****'
    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 '***'
    name '***'
    email '****'
    }
    }
    scm {
    connection gitUrl
    developerConnection gitUrl
    url siteUrl
    }
    }
    }
    }
    }
    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
    }
    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 = "****"
    websiteUrl = siteUrl
    vcsUrl = gitUrl
    licenses = ["Apache-2.0"]
    publish = true
    }
    }
    1. 标注 ** 的地方是需要填写的一些信息
    2. 注意以上代码要是提示 javadoc 字符集错误 可以添加以下代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    javadoc {
    options {
    encoding "UTF-8"
    charSet 'UTF-8'
    author true
    version true
    links "http://docs.oracle.com/javase/7/docs/api"
    }
    }
  6. 之后在项目的 local.properties 文件中(就是最后一处红线的位置),添加我们第二步注册网站是拿到的两个参数。
    1
    2
    bintray.user = username
    bintray.apikey =api key
  7. 一切就绪之后,在根目录的控制台执行

    gradle build

    gradle bintrayUpload

    就可以上传了我们的JLibary

  8. 然后登陆 bintray.com 就可以看到我们项目了,然后在项目里点击 add to Jcenter 按钮就可以发布到 Jcenter . 发布成功会有邮件通知你。

使用我们发布的项目

我们刚才发布的项目现在就可以使用了。

  1. 在没有提交到 Jcenter 的时候,我们的项目是存在于 Maven 仓库的,我们可以这样引用我们的项目:
    1
    2
    3
    4
    5
    6
    <dependency>
    <groupId>cn.ovwvwvo.android</groupId>
    <artifactId>JLibary</artifactId>
    <version>0.1.0</version>
    <type>pom</type>
    </dependency>

    这样写着比较麻烦,我们可以写成我们经常使用的写法,像 compile ‘’;
    首先我们在项目根目录的 build.gradle 添加

    1
    2
    3
    4
    5
    6
    7
    8
    allprojects {
    repositories {
    jcenter()
    maven {
    url 'https://dl.bintray.com/ovwvwvo/maven/'
    }
    }
    }

    其中,url 在 bintray.com/ 项目仓库页面的右上角有显示,然后我们在项目的 build.gradle 依赖里面添加就可以了,具体格式参照上面的 包含的内容

    compile 'cn.ovwvwvo.android:JLibary:0.1.0'

  1. 当项目添加到 Jcenter 之后我们就直接使用

    compile 'cn.ovwvwvo.android:JLibary:0.1.0'

    对项目进行引用。

抱歉!评论已关闭.