编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!

原文:使用Gradle发布项目到JCenter仓库

这篇文章介绍通过Gradle把开源项目发布到公共仓库JCenter中,方便你我他的事情,我们都是很懒的嘛。JCenter现在是Android Studio中repositories的默认节点了,之前是Maven的,不过JCenter是兼容Maven的,所以放心使用。步骤基本是按Publishing Gradle Android Library to jCenter Repository这里来的,英文能看的直接看这篇也行。下面我的步骤正式开始,发布到JCenter仓库的是我的项目:BounceProgressBar

申请Bintray账号

Bintray的基本功能类似于Maven Central,一样的我们需要一个账号,Bintray传送门,注册完成后第一步算完成了。

生成项目的JavaDoc和source JARs

简单的说生成的这两样东西就是我们在下一步中上传到远程仓库JCenter上的文件了。这一步需要android-maven-plugin插件,所以我们需要在项目的build.gradle(Top-level build file,项目最外层的build.gradle文件)中添加这个构建依赖,如下:

1
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
      
      <div class="line number12 index11 alt1">
        12
      </div>
      
      <div class="line number13 index12 alt2">
        13
      </div>
      
      <div class="line number14 index13 alt1">
        14
      </div>
      
      <div class="line number15 index14 alt2">
        15
      </div>
      
      <div class="line number16 index15 alt1">
        16
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `buildscript {`
        </div>
        
        <div class="line number2 index1 alt1">
          `    ``repositories {`
        </div>
        
        <div class="line number3 index2 alt2">
          `        ``jcenter()`
        </div>
        
        <div class="line number4 index3 alt1">
          `    ``}`
        </div>
        
        <div class="line number5 index4 alt2">
          `    ``dependencies {`
        </div>
        
        <div class="line number6 index5 alt1">
          `        ``classpath ``'com.android.tools.build:gradle:1.0.0'`
        </div>
        
        <div class="line number7 index6 alt2">
          `        ``classpath ``'com.github.dcendents:android-maven-plugin:1.2'`
        </div>
        
        <div class="line number8 index7 alt1">
          `        ``// NOTE: Do not place your application dependencies here; they belong`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``// in the individual module build.gradle files`
        </div>
        
        <div class="line number10 index9 alt1">
          `    ``}`
        </div>
        
        <div class="line number11 index10 alt2">
          `}`
        </div>
        
        <div class="line number12 index11 alt1">
          `allprojects {`
        </div>
        
        <div class="line number13 index12 alt2">
          `    ``repositories {`
        </div>
        
        <div class="line number14 index13 alt1">
          `        ``jcenter()`
        </div>
        
        <div class="line number15 index14 alt2">
          `    ``}`
        </div>
        
        <div class="line number16 index15 alt1">
          `}`
        </div>
      </div>
    </td>
  </tr>
</table>

然后在你需要发布的那个module(我这里的即是library)的build.gradle里配置如下内容:

1
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
      
      <div class="line number12 index11 alt1">
        12
      </div>
      
      <div class="line number13 index12 alt2">
        13
      </div>
      
      <div class="line number14 index13 alt1">
        14
      </div>
      
      <div class="line number15 index14 alt2">
        15
      </div>
      
      <div class="line number16 index15 alt1">
        16
      </div>
      
      <div class="line number17 index16 alt2">
        17
      </div>
      
      <div class="line number18 index17 alt1">
        18
      </div>
      
      <div class="line number19 index18 alt2">
        19
      </div>
      
      <div class="line number20 index19 alt1">
        20
      </div>
      
      <div class="line number21 index20 alt2">
        21
      </div>
      
      <div class="line number22 index21 alt1">
        22
      </div>
      
      <div class="line number23 index22 alt2">
        23
      </div>
      
      <div class="line number24 index23 alt1">
        24
      </div>
      
      <div class="line number25 index24 alt2">
        25
      </div>
      
      <div class="line number26 index25 alt1">
        26
      </div>
      
      <div class="line number27 index26 alt2">
        27
      </div>
      
      <div class="line number28 index27 alt1">
        28
      </div>
      
      <div class="line number29 index28 alt2">
        29
      </div>
      
      <div class="line number30 index29 alt1">
        30
      </div>
      
      <div class="line number31 index30 alt2">
        31
      </div>
      
      <div class="line number32 index31 alt1">
        32
      </div>
      
      <div class="line number33 index32 alt2">
        33
      </div>
      
      <div class="line number34 index33 alt1">
        34
      </div>
      
      <div class="line number35 index34 alt2">
        35
      </div>
      
      <div class="line number36 index35 alt1">
        36
      </div>
      
      <div class="line number37 index36 alt2">
        37
      </div>
      
      <div class="line number38 index37 alt1">
        38
      </div>
      
      <div class="line number39 index38 alt2">
        39
      </div>
      
      <div class="line number40 index39 alt1">
        40
      </div>
      
      <div class="line number41 index40 alt2">
        41
      </div>
      
      <div class="line number42 index41 alt1">
        42
      </div>
      
      <div class="line number43 index42 alt2">
        43
      </div>
      
      <div class="line number44 index43 alt1">
        44
      </div>
      
      <div class="line number45 index44 alt2">
        45
      </div>
      
      <div class="line number46 index45 alt1">
        46
      </div>
      
      <div class="line number47 index46 alt2">
        47
      </div>
      
      <div class="line number48 index47 alt1">
        48
      </div>
      
      <div class="line number49 index48 alt2">
        49
      </div>
      
      <div class="line number50 index49 alt1">
        50
      </div>
      
      <div class="line number51 index50 alt2">
        51
      </div>
      
      <div class="line number52 index51 alt1">
        52
      </div>
      
      <div class="line number53 index52 alt2">
        53
      </div>
      
      <div class="line number54 index53 alt1">
        54
      </div>
      
      <div class="line number55 index54 alt2">
        55
      </div>
      
      <div class="line number56 index55 alt1">
        56
      </div>
      
      <div class="line number57 index56 alt2">
        57
      </div>
      
      <div class="line number58 index57 alt1">
        58
      </div>
      
      <div class="line number59 index58 alt2">
        59
      </div>
      
      <div class="line number60 index59 alt1">
        60
      </div>
      
      <div class="line number61 index60 alt2">
        61
      </div>
      
      <div class="line number62 index61 alt1">
        62
      </div>
      
      <div class="line number63 index62 alt2">
        63
      </div>
      
      <div class="line number64 index63 alt1">
        64
      </div>
      
      <div class="line number65 index64 alt2">
        65
      </div>
      
      <div class="line number66 index65 alt1">
        66
      </div>
      
      <div class="line number67 index66 alt2">
        67
      </div>
      
      <div class="line number68 index67 alt1">
        68
      </div>
      
      <div class="line number69 index68 alt2">
        69
      </div>
      
      <div class="line number70 index69 alt1">
        70
      </div>
      
      <div class="line number71 index70 alt2">
        71
      </div>
      
      <div class="line number72 index71 alt1">
        72
      </div>
      
      <div class="line number73 index72 alt2">
        73
      </div>
      
      <div class="line number74 index73 alt1">
        74
      </div>
      
      <div class="line number75 index74 alt2">
        75
      </div>
      
      <div class="line number76 index75 alt1">
        76
      </div>
      
      <div class="line number77 index76 alt2">
        77
      </div>
      
      <div class="line number78 index77 alt1">
        78
      </div>
      
      <div class="line number79 index78 alt2">
        79
      </div>
      
      <div class="line number80 index79 alt1">
        80
      </div>
      
      <div class="line number81 index80 alt2">
        81
      </div>
      
      <div class="line number82 index81 alt1">
        82
      </div>
      
      <div class="line number83 index82 alt2">
        83
      </div>
      
      <div class="line number84 index83 alt1">
        84
      </div>
      
      <div class="line number85 index84 alt2">
        85
      </div>
      
      <div class="line number86 index85 alt1">
        86
      </div>
      
      <div class="line number87 index86 alt2">
        87
      </div>
      
      <div class="line number88 index87 alt1">
        88
      </div>
      
      <div class="line number89 index88 alt2">
        89
      </div>
      
      <div class="line number90 index89 alt1">
        90
      </div>
      
      <div class="line number91 index90 alt2">
        91
      </div>
      
      <div class="line number92 index91 alt1">
        92
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `apply plugin: ``'com.android.library'`
        </div>
        
        <div class="line number2 index1 alt1">
          `apply plugin: ``'com.github.dcendents.android-maven'`
        </div>
        
        <div class="line number3 index2 alt2">
          `apply plugin: ``'com.jfrog.bintray'`
        </div>
        
        <div class="line number4 index3 alt1">
          `// This is the library version used when deploying the artifact`
        </div>
        
        <div class="line number5 index4 alt2">
          `version = ``"1.0.0"`
        </div>
        
        <div class="line number6 index5 alt1">
          `android {`
        </div>
        
        <div class="line number7 index6 alt2">
          `    ``compileSdkVersion 21`
        </div>
        
        <div class="line number8 index7 alt1">
          `    ``buildToolsVersion ``"21.1.2"`
        </div>
        
        <div class="line number9 index8 alt2">
          `    ``resourcePrefix ``"bounceprogressbar__"`    `//这个随便填`
        </div>
        
        <div class="line number10 index9 alt1">
          `    ``defaultConfig {`
        </div>
        
        <div class="line number11 index10 alt2">
          `        ``minSdkVersion 9`
        </div>
        
        <div class="line number12 index11 alt1">
          `        ``targetSdkVersion 21`
        </div>
        
        <div class="line number13 index12 alt2">
          `        ``versionCode 1`
        </div>
        
        <div class="line number14 index13 alt1">
          `        ``versionName version`
        </div>
        
        <div class="line number15 index14 alt2">
          `    ``}`
        </div>
        
        <div class="line number16 index15 alt1">
          `    ``buildTypes {`
        </div>
        
        <div class="line number17 index16 alt2">
          `        ``release {`
        </div>
        
        <div class="line number18 index17 alt1">
          `            ``minifyEnabled ``false`
        </div>
        
        <div class="line number19 index18 alt2">
          `            ``proguardFiles getDefaultProguardFile(``'proguard-android.txt'``), ``'proguard-rules.pro'`
        </div>
        
        <div class="line number20 index19 alt1">
          `        ``}`
        </div>
        
        <div class="line number21 index20 alt2">
          `    ``}`
        </div>
        
        <div class="line number22 index21 alt1">
          `}`
        </div>
        
        <div class="line number23 index22 alt2">
          `dependencies {`
        </div>
        
        <div class="line number24 index23 alt1">
          `    ``compile fileTree(dir: ``'libs'``, include: [``'*.jar'``])`
        </div>
        
        <div class="line number25 index24 alt2">
          `    ``compile ``'com.nineoldandroids:library:2.4.0+'`
        </div>
        
        <div class="line number26 index25 alt1">
          `}`
        </div>
        
        <div class="line number27 index26 alt2">
          `def siteUrl = ``'&lt;a href="https://github.com/zhengxiaopeng/BounceProgressBar">https://github.com/zhengxiaopeng/BounceProgressBar&lt;/a>'` `// 项目的主页`
        </div>
        
        <div class="line number28 index27 alt1">
          `def gitUrl = ``'&lt;a href="https://github.com/zhengxiaopeng/BounceProgressBar.git">https://github.com/zhengxiaopeng/BounceProgressBar.git&lt;/a>'` `// Git仓库的url`
        </div>
        
        <div class="line number29 index28 alt2">
          `group = ``"org.rocko.bpb"` `// Maven Group ID for the artifact,一般填你唯一的包名`
        </div>
        
        <div class="line number30 index29 alt1">
          `install {`
        </div>
        
        <div class="line number31 index30 alt2">
          `    ``repositories.mavenInstaller {`
        </div>
        
        <div class="line number32 index31 alt1">
          `        ``// This generates POM.xml with proper parameters`
        </div>
        
        <div class="line number33 index32 alt2">
          `        ``pom {`
        </div>
        
        <div class="line number34 index33 alt1">
          `        ``project {`
        </div>
        
        <div class="line number35 index34 alt2">
          `        ``packaging ``'aar'`
        </div>
        
        <div class="line number36 index35 alt1">
          `        ``// Add your description here`
        </div>
        
        <div class="line number37 index36 alt2">
          `        ``name ``'Android BounceProgressBar Widget'` `//项目描述`
        </div>
        
        <div class="line number38 index37 alt1">
          `        ``url siteUrl`
        </div>
        
        <div class="line number39 index38 alt2">
          `        ``// Set your license`
        </div>
        
        <div class="line number40 index39 alt1">
          `        ``licenses {`
        </div>
        
        <div class="line number41 index40 alt2">
          `            ``license {`
        </div>
        
        <div class="line number42 index41 alt1">
          `            ``name ``'The Apache Software License, Version 2.0'`
        </div>
        
        <div class="line number43 index42 alt2">
          `            ``url ``'&lt;a href="http://www.apache.org/licenses/LICENSE-2.0.txt">http://www.apache.org/licenses/LICENSE-2.0.txt&lt;/a>'`
        </div>
        
        <div class="line number44 index43 alt1">
          `            ``}`
        </div>
        
        <div class="line number45 index44 alt2">
          `        ``}`
        </div>
        
        <div class="line number46 index45 alt1">
          `        ``developers {`
        </div>
        
        <div class="line number47 index46 alt2">
          `        ``developer {`
        </div>
        
        <div class="line number48 index47 alt1">
          `        ``id ``'zhengxiaopeng'`    `//填写的一些基本信息`
        </div>
        
        <div class="line number49 index48 alt2">
          `        ``name ``'Rocko'`
        </div>
        
        <div class="line number50 index49 alt1">
          `        ``email ``'zhengxiaopeng.china@gmail.com'`
        </div>
        
        <div class="line number51 index50 alt2">
          `        ``}`
        </div>
        
        <div class="line number52 index51 alt1">
          `        ``}`
        </div>
        
        <div class="line number53 index52 alt2">
          `        ``scm {`
        </div>
        
        <div class="line number54 index53 alt1">
          `        ``connection gitUrl`
        </div>
        
        <div class="line number55 index54 alt2">
          `        ``developerConnection gitUrl`
        </div>
        
        <div class="line number56 index55 alt1">
          `        ``url siteUrl`
        </div>
        
        <div class="line number57 index56 alt2">
          `        ``}`
        </div>
        
        <div class="line number58 index57 alt1">
          `        ``}`
        </div>
        
        <div class="line number59 index58 alt2">
          `        ``}`
        </div>
        
        <div class="line number60 index59 alt1">
          `    ``}`
        </div>
        
        <div class="line number61 index60 alt2">
          `}`
        </div>
        
        <div class="line number62 index61 alt1">
          `task sourcesJar(type: Jar) {`
        </div>
        
        <div class="line number63 index62 alt2">
          `    ``from android.sourceSets.main.java.srcDirs`
        </div>
        
        <div class="line number64 index63 alt1">
          `    ``classifier = ``'sources'`
        </div>
        
        <div class="line number65 index64 alt2">
          `}`
        </div>
        
        <div class="line number66 index65 alt1">
          `task javadoc(type: Javadoc) {`
        </div>
        
        <div class="line number67 index66 alt2">
          `    ``source = android.sourceSets.main.java.srcDirs`
        </div>
        
        <div class="line number68 index67 alt1">
          `    ``classpath += project.files(android.getBootClasspath().join(File.pathSeparator))`
        </div>
        
        <div class="line number69 index68 alt2">
          `}`
        </div>
        
        <div class="line number70 index69 alt1">
          `task javadocJar(type: Jar, dependsOn: javadoc) {`
        </div>
        
        <div class="line number71 index70 alt2">
          `    ``classifier = ``'javadoc'`
        </div>
        
        <div class="line number72 index71 alt1">
          `    ``from javadoc.destinationDir`
        </div>
        
        <div class="line number73 index72 alt2">
          `}`
        </div>
        
        <div class="line number74 index73 alt1">
          `artifacts {`
        </div>
        
        <div class="line number75 index74 alt2">
          `    ``archives javadocJar`
        </div>
        
        <div class="line number76 index75 alt1">
          `    ``archives sourcesJar`
        </div>
        
        <div class="line number77 index76 alt2">
          `}`
        </div>
        
        <div class="line number78 index77 alt1">
          `Properties properties = ``new` `Properties()`
        </div>
        
        <div class="line number79 index78 alt2">
          `properties.load(project.rootProject.file(``'local.properties'``).newDataInputStream())`
        </div>
        
        <div class="line number80 index79 alt1">
          `bintray {`
        </div>
        
        <div class="line number81 index80 alt2">
          `    ``user = properties.getProperty(``"bintray.user"``)`
        </div>
        
        <div class="line number82 index81 alt1">
          `    ``key = properties.getProperty(``"bintray.apikey"``)`
        </div>
        
        <div class="line number83 index82 alt2">
          `    ``configurations = [``'archives'``]`
        </div>
        
        <div class="line number84 index83 alt1">
          `    ``pkg {`
        </div>
        
        <div class="line number85 index84 alt2">
          `        ``repo = ``"maven"`
        </div>
        
        <div class="line number86 index85 alt1">
          `        ``name = ``"BounceProgressBar"`    `//发布到JCenter上的项目名字`
        </div>
        
        <div class="line number87 index86 alt2">
          `        ``websiteUrl = siteUrl`
        </div>
        
        <div class="line number88 index87 alt1">
          `        ``vcsUrl = gitUrl`
        </div>
        
        <div class="line number89 index88 alt2">
          `        ``licenses = [``"Apache-2.0"``]`
        </div>
        
        <div class="line number90 index89 alt1">
          `        ``publish = ``true`
        </div>
        
        <div class="line number91 index90 alt2">
          `    ``}`
        </div>
        
        <div class="line number92 index91 alt1">
          `}`
        </div>
      </div>
    </td>
  </tr>
</table>

配置好上述后需要在你的项目的根目录上的local.properties文件里(一般这文件需gitignore,防止泄露账户信息)配置你的bintray账号信息,_your_user_name_为你的用户名,_your_apikey_为你的账户的apikey,可以点击进入你的账户信息里再点击Edit即有查看API Key的选项,把他复制下来。

1
      <div class="line number2 index1 alt1">
        2
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `bintray.user=your_user_name`
        </div>
        
        <div class="line number2 index1 alt1">
          `bintray.apikey=your_apikey`
        </div>
      </div>
    </td>
  </tr>
</table>

Rebuild一下项目,顺利的话,就可以在module里的build文件夹里生成相关文件了。这一步为止,就可以把你项目生成到本地的仓库中了,Android Studio中默认即在Android\sdk\extras\android\m2repository这里,所以我们可以通过如下命令(Windows中,可能还需要下载一遍Gradle,之后就不需要了)执行生成:

    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `gradlew install`
        </div>
      </div>
    </td>
  </tr>
</table>

上传到Bintray

上传到Bintray需要gradle-bintray-plugin的支持,所以在最外层的build.gradle里添加构建依赖:

1
1
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
      
      <div class="line number12 index11 alt1">
        12
      </div>
      
      <div class="line number13 index12 alt2">
        13
      </div>
      
      <div class="line number14 index13 alt1">
        14
      </div>
      
      <div class="line number15 index14 alt2">
        15
      </div>
      
      <div class="line number16 index15 alt1">
        16
      </div>
      
      <div class="line number17 index16 alt2">
        17
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `buildscript {`
        </div>
        
        <div class="line number2 index1 alt1">
          `    ``repositories {`
        </div>
        
        <div class="line number3 index2 alt2">
          `        ``jcenter()`
        </div>
        
        <div class="line number4 index3 alt1">
          `    ``}`
        </div>
        
        <div class="line number5 index4 alt2">
          `    ``dependencies {`
        </div>
        
        <div class="line number6 index5 alt1">
          `        ``classpath ``'com.android.tools.build:gradle:1.0.0'`
        </div>
        
        <div class="line number7 index6 alt2">
          `        ``classpath ``'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'`
        </div>
        
        <div class="line number8 index7 alt1">
          `        ``classpath ``'com.github.dcendents:android-maven-plugin:1.2'`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``// NOTE: Do not place your application dependencies here; they belong`
        </div>
        
        <div class="line number10 index9 alt1">
          `        ``// in the individual module build.gradle files`
        </div>
        
        <div class="line number11 index10 alt2">
          `    ``}`
        </div>
        
        <div class="line number12 index11 alt1">
          `}`
        </div>
        
        <div class="line number13 index12 alt2">
          `allprojects {`
        </div>
        
        <div class="line number14 index13 alt1">
          `    ``repositories {`
        </div>
        
        <div class="line number15 index14 alt2">
          `        ``jcenter()`
        </div>
        
        <div class="line number16 index15 alt1">
          `    ``}`
        </div>
        
        <div class="line number17 index16 alt2">
          `}`
        </div>
      </div>
    </td>
  </tr>
</table>

Rebuild一下,然后执行如下命令(Windows中)完成上传:

    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `gradlew bintrayUpload`
        </div>
      </div>
    </td>
  </tr>
</table>

上传完成即可在Bintray网站上找到你的Repo,我们需要完成最后一步工作,申请你的Repo添加到JCenter。可以进入这个页面,输入你的项目名字点击匹配到的项目,然后写一写Comments再send即可,然后就等管理员批准了,我是大概等了40分钟,然后网站上会给你一条通过信息,然后就OK了,大功告成。

成功后就可以在其它项目里方便的使用你发布的项目了:

1
1
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `dependencies {`
        </div>
        
        <div class="line number2 index1 alt1">
          `    ``compile ``'org.rocko.bpb:library:1.0.0'`
        </div>
        
        <div class="line number3 index2 alt2">
          `}`
        </div>
      </div>
    </td>
  </tr>
</table>

End

💬 评论