手把手教你釋出自己的開源庫到 Jcenter

玉剛說發表於2019-03-04

本文由玉剛說寫作平臺提供寫作贊助

原作者:Mr.S

版權宣告:本文版權歸微信公眾號玉剛說所有,未經許可,不得以任何形式轉載

最熟悉的陌生人

想必大家都用過這樣的或者那樣的依賴吧。

    compile `com.android.support:support-v4:24.2.1`
    compile `com.google.code.gson:gson:2.7`
    compile `com.umeng.analytics:analytics:6.1.4`
複製程式碼

有谷歌自己家的,還有第三方的比如友盟等等,我們在用的時候會感到極度的方便。不用再像以前eclipse時期需要把library下載下來再進行處理了。只需要一行程式碼,就可以得到我們想要的。

有時候感覺這種依賴離我們自己很遠,感覺這都是大神們的專屬,感覺這些很是高階,所以會感覺很陌生。其實說白了,就和你上傳到github一個效果,就是一個倉庫,我們把我們的Library放上去就可以了。本質上來說是超級簡單的。那我就手把手教你釋出自己的開源庫到Jcenter,讓別人也用用我們們的依賴庫,面試的時候也可以吹吹牛X。忽悠忽悠面試官。簡單拿高薪,贏取白富美。(醒醒,醒醒,兄弟)

Maven和Jcenter

很多人都會有這幾個疑惑:

  • 什麼是Maven
  • 什麼是Jcenter
  • 上面這哥倆啥關係

什麼是Maven

Maven 是專門用於構建和管理Java相關專案的工具。這裡是官方介紹。Java世界中主要有三大構建工具:Ant、Maven和Gradle。經過這幾年的發展,Ant差不多已經銷聲匿跡了、Maven也差不多也快黃了,我們們的Gradle現在可是如日中天。

什麼是Jcenter

是由JFrog公司提供的Bintray中的Java倉庫。它是當前世界上最大的Java和Android開源軟體構件倉庫。 所有內容都通過內容分發網路(CDN)使用加密https連線獲取。JCenter是Goovy Grape內的預設倉庫,Gradle內建支援(jcenter()倉庫),非常易於在其他構建工具內進行配置。JCenter相比MavenCenter構件更多,效能也更好。

Maven和Jcenter啥關係

手把手教你釋出自己的開源庫到 Jcenter

如上圖所示,Jcenter裡支援Maven,也支援Gradle。說白了Maven是程式碼倉庫,支援多種構建工具。你上傳的Library這幾個工具我都支援了,想怎麼用你自己選擇。總結說來是程式碼倉庫和構造工具的關係。

Jcenter 上傳步驟

主要分為如下幾個步驟。

建立你的 Library 工程

首先我們要建立一個Library工程。然後給一個高大上的名字。比如FireworkView:

手把手教你釋出自己的開源庫到 Jcenter
手把手教你釋出自己的開源庫到 Jcenter

我這裡這個Library的功能是給EditText 新增煙花效果(很簡單的一個功能)。

註冊 Bintray 賬號

前提:科學上網 咳咳咳!你懂得!

我們需要註冊一個 Bintray賬號。

官網(企業):https://bintray.com/
個人:https://bintray.com/signup/oss

這裡我們要說明一下,一定要點選個人這個連結,官網的註冊連結只能註冊企業使用者,坑坑坑~~~

手把手教你釋出自己的開源庫到 Jcenter

我們可以直接註冊,可以用谷歌賬號或者github賬號,直接關聯註冊,建議大家用github賬號進行關聯註冊。這樣會很方便。當然也是有坑的,如果我們的github賬號設定的郵箱是QQ郵箱,可能就有點碉堡了,貌似人家不認。所以郵箱最好用谷歌郵箱。當然我們獨立註冊Bintray,登入之後也可以進行第三方賬號的繫結,這個和微信登入一樣一樣的。

註冊成功之後,我們要建立一個Maven倉庫。

手把手教你釋出自己的開源庫到 Jcenter

點選建立

手把手教你釋出自己的開源庫到 Jcenter

Type選Maven,Default Licenses選Apache-2.0協議,Description是專案描述。
注意:Name可以寫專案名或者其他含義的名字,之後配置需要用到這個Name。

好到此為止,我們需要的必要材料都準備齊了。

配置 build.gradle

1、builde.grade(專案根目錄下)

buildscript {
    repositories {
        jcenter()
    }
//  dependencies表明專案依賴對應版本的Gradle構建工具
    dependencies {
       classpath `com.android.tools.build:gradle:3.0.0`
  
        //加上這兩行
        classpath `com.github.dcendents:android-maven-gradle-plugin:2.1`
        classpath `com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3`
      
    }
}

allprojects {
    repositories {
        jcenter()
    }

}

複製程式碼

至於最新版本號,大家可以去官網自行更改:

2、builde.grade(Library目錄下)

//  apply plugin表明應用的外掛的型別,
apply plugin: `com.android.library`

//新增這兩行 
apply plugin: `com.github.dcendents.android-maven`
apply plugin: `com.jfrog.bintray`
android {
    compileSdkVersion 26

    lintOptions {
        abortOnError false
    }

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"


    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(`proguard-android.txt`), `proguard-rules.pro`
        }
    }

}

dependencies {
    implementation fileTree(dir: `libs`, include: [`*.jar`])

}

//專案主頁
def siteUrl = `https://github.com/shishaoyan/FireworksView`
//專案的git地址
def gitUrl = `https://github.com/shishaoyan/FireworksView.git`
//釋出到JCenter上的專案名字
def libName = "FireworksView"

//釋出到組織名稱名字,必須填寫 
//(com.ssy.fireworkstextview)這樣寫是不好的,專案名會拼上去
//我手欠然後最後就是這樣了,大家引以為戒
//compile `com.ssy.fireworkstextview:fireworkstextview:1.0.0`
group = "com.ssy"
// 版本號,下次更新是隻需要更改版本號即可
version = "1.0.0"
//上面配置後上傳至JCenter後的編譯路徑是這樣的: compile `me.songning.CircleView:library:1.0.0`

//生成原始檔
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = `sources`
}

//生成Javadoc文件
task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//文件打包成jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = `javadoc`
    from javadoc.destinationDir
}

//拷貝javadoc檔案
task copyDoc(type: Copy) {
    from "${buildDir}/docs/"
    into "docs"
}

//上傳到JCenter所需要的原始碼檔案
artifacts {
    archives javadocJar
    archives sourcesJar
}

// 配置maven庫,生成POM.xml檔案
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging `aar`
                //專案描述,隨意填
                name `Input text with fireworks.`
                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 `baidianxiao`
                        name `ShiShaoYan`
                        email `baidianxiao@gmail.com`
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

//上傳到JCenter
Properties properties = new Properties()
properties.load(project.rootProject.file(`local.properties`).newDataInputStream())

bintray {
    user = properties.getProperty("bintray.user")    //讀取 local.properties 檔案裡面的 bintray.user
    key = properties.getProperty("bintray.apikey")   //讀取 local.properties 檔案裡面的 bintray.apikey
    configurations = [`archives`]
    pkg {
        //注意:這裡的repo值必須要和你建立Maven倉庫的時候的名字一樣
        repo = "ssy"
        //釋出到JCenter上的專案名字
        name = libName
        //專案描述
        desc = `Input text with fireworks`
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

javadoc {
    options{
        //如果你的專案裡面有中文註釋的話,必須將格式設定為UTF-8,不然會出現亂碼
        encoding "UTF-8"
        charSet `UTF-8`
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
    }
}
複製程式碼

3、local.properties

將user和key寫到這個檔案之中。

ndk.dir=/Users/shishaoyan/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/shishaoyan/Library/Android/sdk
##下面這兩個
bintray.apikey=93200ffcf836**********c8e78425e9cf9967a
bintray.user=baidianxiao
複製程式碼

通過如下步驟可以在bintray上面獲取user和apikey:

手把手教你釋出自己的開源庫到 Jcenter

然後點選Edit

手把手教你釋出自己的開源庫到 Jcenter
手把手教你釋出自己的開源庫到 Jcenter
執行上傳命令

1、開啟Android Studio底部工具欄的Terminal,輸入命令:

windows
gradlew install

mac
./gradlew install

手把手教你釋出自己的開源庫到 Jcenter

BUILD SUCCESSFUL說明執行成功。

2、上傳到Bintray。

windows:
gradlew bintrayUpload
mac:
./gradlew bintrayUpload

手把手教你釋出自己的開源庫到 Jcenter

我這裡因為網路的原因,失敗了一次,然後科學上網了一下,就可以了。我們看到我們已經長傳成功了,點選我們的Respository。

手把手教你釋出自己的開源庫到 Jcenter

OK,完美,成功了嗎?

手把手教你釋出自己的開源庫到 Jcenter

再點進去

手把手教你釋出自己的開源庫到 Jcenter

我們發現我們想要的東西終於出來了。

compile `com.ssy:fireworkstextview:1.0.0`
複製程式碼

我們迫不及待的要加入我們的專案引用一下了,且慢,你還沒有釋出呢?看右邊的Add to JCenter按鈕,釋出成功後才可以讓大家來使用,直接點選Send傳送就可以了。

手把手教你釋出自己的開源庫到 Jcenter
手把手教你釋出自己的開源庫到 Jcenter

最後我們需要等待幾個小時,也可能是一兩天,因為時差的原因和別的原因都可能導致慢一些,我的大概是一天半的時間。

//這兩個都可以使用,但是存在命名規範的問題
//字首 com.ssy.fireworkstextview 多餘的失誤
compile `com.ssy.fireworkstextview:fireworkstextview:1.0.0`
//Library命名單詞錯誤的失誤
compile `com.ssy:fireworkstextview:1.0.0`
複製程式碼

不知道大家有沒有發現了我的一個錯誤:fireworkstextview這個單詞是我建立專案的時候打錯的,本來應該是FireworksView。

手把手教你釋出自己的開源庫到 Jcenter

我們在配置的時候並沒有再出現這個詞而是用的FireworksView,那麼從這個錯誤中我們會知道,冒號後面的名字是專案名字。我們設定libName作用的地方如下圖所示。而不是我們冒號後的名字。所以命名一定要一致。

//釋出到JCenter上的專案名字
def libName = "FireworksView"
複製程式碼
手把手教你釋出自己的開源庫到 Jcenter

坑總是意外操作的時候出現的,趟過坑之後就是一片坦途了。

終於把步驟全部走完了。我們感覺貌似有點麻煩啊。能不能更簡單點呢?答案是肯定的。

更簡單的方案

1、新建一個倉庫

手把手教你釋出自己的開源庫到 Jcenter

2、我們可以看到Import from GitHub (前提是你已經關聯Github賬號,按步驟來就可以了很簡單)直接可以引用Public的專案,私有的是需要Bintray賬號付費升級的。

手把手教你釋出自己的開源庫到 Jcenter

3、我們選擇我們的專案(我這裡隨便選了一個)

手把手教你釋出自己的開源庫到 Jcenter

4、看到這裡,接下里需要做的事情不必我說了吧。

手把手教你釋出自己的開源庫到 Jcenter

總結

兩種方法,一個複雜,一個簡單,其實我是推薦大家使用Github這種方式,一來版本好控制,二來方便快捷。

其實就是這麼簡單,沒有我們想的那麼難。當然,大家肯定會遇到一些莫名其妙的坑,有坑的同學可以看看這篇文章Android 釋出專案到 JCenter 遇到的各種坑。我遇到了java 10 .0.1 區分不出來版本號的問題,無奈只能JDK降級,換了8的,解決了問題。

手把手教你釋出自己的開源庫到 Jcenter

所以大家用Github的方式吧,坑少,快速,不用配置太多。

  1. 本文配套原始碼:
    https://github.com/shishaoyan/FireworksView

  2. VirtualAPK的Jcenter上傳指令碼:
    https://github.com/didi/VirtualAPK/blob/master/CoreLibrary/upload.gradle

參考文章

一步一步教你在JCenter釋出開源庫:
https://www.jianshu.com/p/275fc9d54e4a

手把手教你釋出自己的開源庫到 Jcenter
歡迎關注我的微信公眾號,接收第一手技術乾貨

相關文章