通过Android Studio快速发布Library项目到maven仓库

本文转载自:

通过Android Studio快速发布Library项目到maven仓库

标签: maven仓库Android Studiogit
1672人阅读 评论(0) 收藏 举报
本文章已收录于:
分类:

为便于和大家交流,最近想把自己开发的一个下载库传到maven,网上搜了不少发布教程,也试着去做了,结果过程总是不尽如人意,后来终于找到了一个详尽完整的发布教程(英文版),小编按照此教程很快便把自己的library传到maven使用了,现在分享给大家。

1)不用多说,你需要有一个待发布的library项目和有个bintray账号

2)打开个人中心,选择API key,并保存这个key值,后面会用到





3)在项目的build.gradle文件中,加上Bintray Plugin和Maven Plugin,

  1. classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'  
  2. classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"  
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"

4)打开library项目的build.gradle文件,在上面加上如下支持:

  1. apply plugin: 'com.jfrog.bintray'  
  2. apply plugin: 'com.github.dcendents.android-maven'  
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

5)指定POM内容(Bintray plugin在上传库时会检查POM文件的内容,虽然Maven plugin会帮你生成文件,但仍需有你指定groupId和version)

  1. group = 'com.github.hathibelagal.librarytutorial'// library库包名  
  2. version = '1.0.1'// 版本号  
group = 'com.github.hathibelagal.librarytutorial'// library库包名
version = '1.0.1'// 版本号
(另外,如果你不指定artifactId,maven默认会将library库的名字作为artifactId使用)

6)生成Sources Jar文件,并强制设定源码位置

  1. task generateSourcesJar(type: Jar) {  
  2.     from android.sourceSets.main.java.srcDirs  
  3.     classifier'sources'  
  4. }  
task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier'sources'
}

7)生成Jar文档,并强制设定位置

  1. task generateJavadocs(type: Javadoc) {  
  2.     source = android.sourceSets.main.java.srcDirs   
  3.     classpath += project.files(android.getBootClasspath()  
  4.             .join(File.pathSeparator)) //使用android.getBootClasspath关联Android SDK类文件  
  5. }  
task generateJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath()
            .join(File.pathSeparator)) //使用android.getBootClasspath关联Android SDK类文件
}

根据上面的文档生成文档文件

  1. task generateJavadocsJar(type: Jar) {  
  2.     from generateJavadocs.destinationDir  
  3.     classifier'javadoc'  
  4. }  
task generateJavadocsJar(type: Jar) {
    from generateJavadocs.destinationDir
    classifier'javadoc'
}

为了保证generateJavadocsJar在generateJavadocs完成时开始,还需要加上如下依赖片段

  1. generateJavadocsJar.dependsOn generateJavadocs  
generateJavadocsJar.dependsOn generateJavadocs


8)将以上生成的jar文件包含在artifacts里面,即放在要上传到maven的文件列表中

  1. artifacts {  
  2.     archives generateJavadocsJar //原文为generateJavaDocsJar,此处已做矫正,要严格显示大小写  
  3.     archives generateSourcesJar  
  4. }  
artifacts {
    archives generateJavadocsJar //原文为generateJavaDocsJar,此处已做矫正,要严格显示大小写
    archives generateSourcesJar
}

9)打开右侧gradle窗口,找到library项目中的install,双击运行这个task,任务完成时,将会生成所有需要发布的文件,POM、AAR、sources JAR和一个Javedocs JAR文件


10)准备好所有的资源文件后,接下来就是配置包的详细参数,开始上传了(配置和上传完成后,bintray会自动在后台生成相应的仓库),示例:

  1. bintray {  
  2.     user ='Bintray账户名' //在个人中心的路径里可以找到  
  3.     key ='01234567890abcdef01234567890abcdef' //上述保存的API key  
  4.     pkg {  
  5.         repo ='maven' //必须设定一个值,这里选择maven  
  6.         name ='com.github.hathibelagal.mylittlelibrary' //必须,包名  
  7.         version {  
  8.             name ='1.0.1-tuts' //版本名称  
  9.             desc ='My test upload' //版本描述  
  10.             released  =new Date() //上传过程中如果此处报错,可以注释掉此句  
  11.             vcsTag ='1.0.1' //版本  
  12.         }  
  13.         licenses = ['Apache-2.0'] //开源协议  
  14.         vcsUrl ='https://github.com/hathibelagal/LibraryTutorial.git' //指定项目git地址  
  15.         websiteUrl ='https://github.com/hathibelagal/LibraryTutorial' //项目官网地址  
  16.     }  
  17.     configurations = ['archives'] //必须为archives  
  18. }  
bintray {
    user ='Bintray账户名' //在个人中心的路径里可以找到
    key ='01234567890abcdef01234567890abcdef' //上述保存的API key
    pkg {
        repo ='maven' //必须设定一个值,这里选择maven
        name ='com.github.hathibelagal.mylittlelibrary' //必须,包名
        version {
            name ='1.0.1-tuts' //版本名称
            desc ='My test upload' //版本描述
            released  =new Date() //上传过程中如果此处报错,可以注释掉此句
            vcsTag ='1.0.1' //版本
        }
        licenses = ['Apache-2.0'] //开源协议
        vcsUrl ='https://github.com/hathibelagal/LibraryTutorial.git' //指定项目git地址
        websiteUrl ='https://github.com/hathibelagal/LibraryTutorial' //项目官网地址
    }
    configurations = ['archives'] //必须为archives
}

使用Bintray plugin上传上面生成的资源文件到仓库,即发布应用。点击右侧gradle窗口,找到library->publishing->bintrayUpload,并双击此task,开始上传。


11)上传完成后,会在在后台看到新的仓库,如想让别人能通过compile应用,还需要点击Publish链接,正式发布。


使用上传的仓库方法:

  1. repositories {  
  2.     maven {  
  3.         url 'https://dl.bintray.com/eruzza/maven' //指定自己的maven路径,在未将library加入的jcenter中前,这是必须的  
  4.     }  
  5. }  
  6.    
  7. dependencies {  
  8.     compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'  
  9. }  
repositories {
    maven {
        url 'https://dl.bintray.com/eruzza/maven' //指定自己的maven路径,在未将library加入的jcenter中前,这是必须的
    }
}
 
dependencies {
    compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'
}


如果想让library项目在jcenter中被检索到,可以在Bintray对应的项目详情页中,点击 Add to JCenter,在下一页填写一些commit信息后点击send,即可在1-2天左右后在JCenter repository中看到自己的项目。







配置全图:

  1. apply plugin: 'com.android.application'  
  2. apply plugin: 'com.jfrog.bintray'  
  3. apply plugin: 'com.github.dcendents.android-maven'  
  4.   
  5. android {  
  6.     compileSdkVersion 23  
  7.     buildToolsVersion "23.0.2"  
  8.   
  9.     defaultConfig {  
  10.         applicationId "simen.crashlogsample"  
  11.         minSdkVersion 15  
  12.         targetSdkVersion 23  
  13.         versionCode 1  
  14.         versionName "1.0"  
  15.     }  
  16.     buildTypes {  
  17.         release {  
  18.             minifyEnabled false  
  19.             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  20.         }  
  21.     }  
  22. }  
  23.   
  24. dependencies {  
  25.     compile fileTree(dir: 'libs', include: ['*.jar'])  
  26.     compile project(':crashlog')  
  27. }  
  28.   
  29. group = 'com.github.hathibelagal.librarytutorial'// library库包名  
  30. version = '1.0.1'// 版本号  
  31.   
  32. task generateSourcesJar(type: Jar) {  
  33.     from android.sourceSets.main.java.srcDirs  
  34.     classifier'sources'  
  35. }  
  36.   
  37.   
  38. task generateJavadocs(type: Javadoc) {  
  39.     source = android.sourceSets.main.java.srcDirs  
  40.     classpath += project.files(android.getBootClasspath()  
  41.             .join(File.pathSeparator)) //使用android.getBootClasspath关联Android SDK类文件  
  42. }  
  43.   
  44. task generateJavadocsJar(type: Jar) {  
  45.     from generateJavadocs.destinationDir  
  46.     classifier'javadoc'  
  47. }  
  48.   
  49. generateJavadocsJar.dependsOn generateJavadocs  
  50.   
  51. artifacts {  
  52.     archives generateJavadocsJar //原文为generateJavaDocsJar,此处已做矫正,要严格显示大小写  
  53.     archives generateSourcesJar  
  54. }  
  55.   
  56. bintray {  
  57.     user ='Bintray账户名' //在个人中心的路径里可以找到  
  58.     key ='01234567890abcdef01234567890abcdef' //上述保存的API key  
  59.     pkg {  
  60.         repo ='maven' //必须设定一个值,这里选择maven  
  61.         name ='com.github.hathibelagal.mylittlelibrary' //必须,包名  
  62.         version {  
  63.             name ='1.0.1-tuts' //版本名称  
  64.             desc ='My test upload' //版本描述  
  65.             released  =new Date() //上传过程中如果此处报错,可以注释掉此句  
  66.             vcsTag ='1.0.1' //版本  
  67.         }  
  68.         licenses = ['Apache-2.0'//开源协议  
  69.         vcsUrl ='https://github.com/hathibelagal/LibraryTutorial.git' //指定项目git地址  
  70.         websiteUrl ='https://github.com/hathibelagal/LibraryTutorial' //项目官网地址  
  71.     }  
  72.     configurations = ['archives'//必须为archives  
  73. }  
apply plugin: 'com.android.application'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "simen.crashlogsample"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':crashlog')
}

group = 'com.github.hathibelagal.librarytutorial'// library库包名
version = '1.0.1'// 版本号

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier'sources'
}


task generateJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath()
            .join(File.pathSeparator)) //使用android.getBootClasspath关联Android SDK类文件
}

task generateJavadocsJar(type: Jar) {
    from generateJavadocs.destinationDir
    classifier'javadoc'
}

generateJavadocsJar.dependsOn generateJavadocs

artifacts {
    archives generateJavadocsJar //原文为generateJavaDocsJar,此处已做矫正,要严格显示大小写
    archives generateSourcesJar
}

bintray {
    user ='Bintray账户名' //在个人中心的路径里可以找到
    key ='01234567890abcdef01234567890abcdef' //上述保存的API key
    pkg {
        repo ='maven' //必须设定一个值,这里选择maven
        name ='com.github.hathibelagal.mylittlelibrary' //必须,包名
        version {
            name ='1.0.1-tuts' //版本名称
            desc ='My test upload' //版本描述
            released  =new Date() //上传过程中如果此处报错,可以注释掉此句
            vcsTag ='1.0.1' //版本
        }
        licenses = ['Apache-2.0'] //开源协议
        vcsUrl ='https://github.com/hathibelagal/LibraryTutorial.git' //指定项目git地址
        websiteUrl ='https://github.com/hathibelagal/LibraryTutorial' //项目官网地址
    }
    configurations = ['archives'] //必须为archives
}


英语原文地址:http://code.tutsplus.com/tutorials/creating-and-publishing-an-android-library--cms-24582


附注:

1,上传过程中如果遇到“No service of type Factory available in ProjectScopeServices”异常,可以更新插件版本为:classpath 'com.github.dcendents:Android-maven-gradle-plugin:1.4.1'或'1.5.0'


0
0
 
 
  相关文章推荐
      • 0
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值