我是如何將Pluto作為library分享到jCenter

weixin_33809981發表於2017-03-13

最近小明正在看一本名叫《歷代經濟變革得失》從歷史角度分析經濟變化的書。通過研究經濟方式,作為一個工科畢業的小明,當然直接想到是資料統計,建立數學理論模型,這本書入手方式就成為了第一個吸引點。除了耳熟能詳的歷史事件人物,階級的鬥爭之外,留下深刻印象的還是封閉專制和開放改革之間的博弈。彰顯出活力生態,Open和Share是一個很好的選擇。
上個月27號開源Pluto框架《我的開源Android開發框架Pluto》,得到客觀上多正面的反饋。至此,進入這次主觀上的第二步,將Pluto變的更容易使用--將Pluto作為library分享到jCenter。

我是如何將Pluto作為library分享到jCenter
文章結構

一.文章價值

1、實現我的框架Pluto分享到jCenter,以後開發直接用一句gradle語句就可以使用框架。
2、嚴格參照我的實現步驟,就不用在其他blog一篇篇閱讀總結踏坑才實現自己的library分享。

  dependencies {
      compile 'com.minggo:Pluto:1.0'
  }複製程式碼

其中,bintray.com要熟悉,要不要翻牆?不用;Gradle配置要分清楚配置library的Gradle還是Project Gradle;編譯和上傳要多久?編譯保證不出錯就行,上傳普遍是1分鐘;link to jCenter稽核要多久,我的是3個小時。

二.bintray賬號設定

1.新官網整體認知

我是如何將Pluto作為library分享到jCenter
註冊登入後的頁面

其中“View Profile”是個人中心,下邊會介紹獲取appkey."Add New Organization"是新增組織,這個比較重要,為了保證順利上傳,手動配置自己Organization更為合適。

2.新增組織

1)選擇建立新組織

我是如何將Pluto作為library分享到jCenter
選擇建立新組織

2)根據填寫組織相關資訊,主要完成帶星的填寫就行

我是如何將Pluto作為library分享到jCenter
填寫組織資訊

3)檢視建立完成的組織頁面

我是如何將Pluto作為library分享到jCenter
組織管理頁面

3.建立創庫

手動配置自己的倉庫尤為重要,注意創庫名。因為pluto倉庫名將會在Gradle檔案中做關聯,type選Maven主要針對本文實現的方式,必須選擇。關於版權License選擇是個可選選項,我的Pluto專案在github上建立的時候就選擇了MIT,所以就選擇MIT。創庫描述也是一個可選填寫,我就把Pluto在github上的描述新增上去了。

我是如何將Pluto作為library分享到jCenter
建立倉庫

在組織頁面下就可以看見一下倉庫,需要了解可以點選去看看。

我是如何將Pluto作為library分享到jCenter
倉庫Pluto.png

4.獲取自己的apikey

依次點選頁面“Edit Profile”-->"API Key" -->"Show",最好先複製存下來,等下gradle配置用到。

我是如何將Pluto作為library分享到jCenter
獲取appkey

三.Gradle配置

1.整體要留意的3個地方

第一處,Project的gradle用來配置maven和bintray外掛用的;第二處,Library的gradle用來配置版本、倉庫等等用的;第三處,local.properties用來配置bintray的賬號和apikey用的。那麼關鍵內容將會在Library的gradle中。

我是如何將Pluto作為library分享到jCenter
準備改動一下3個地方

2.Project的Gradle配置maven和bintray外掛

找到Project的Gradle檔案,在dependencies 中新增一下兩句外掛路徑

dependencies {
    //Gradle Android Maven plugin
    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
    //Gradle Bintray Plugin
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.1'
}複製程式碼

更詳細的Gradle Android Maven pluginGradle Bintray Plugin

3.local.properties的賬號和appkey配置

找到local.properties檔案

bintray.user=minggo620 // bintray使用者名稱
bintray.apikey=ab02158f80eaa139423axxxxxxxxxx //bintray API KEY複製程式碼

之前複製下來的apikey派上用場了,貼上到local.properties檔案後邊。為什麼放在這個檔案原因是專案.gitignore檔案預設忽略這個檔案上傳,正好免除暴露key。

4.Library的Gradle配置

找到Library的Gradle檔案,進行一下配置

#####1)引用Maven和bintray外掛
頭部加上

apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'複製程式碼
2)讀取local.properties檔案

頭部加上接上

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())複製程式碼
3)配置必要和可選常量

比如最終形式是 compile 'com.minggo:Pluto:1.0'那麼group和version如下。至於Pluto是Library的名稱,在執行任務中會配置。

def siteUrl = 'https://github.com/minggo620/Pluto-Android'   // 專案的主頁
def gitUrl = 'https://github.com/minggo620/Pluto-Android.git'   // Git倉庫的url

version = "1.0"
group = "com.minggo"複製程式碼

4)配置bintray配對任務

以下寫有註釋的都要注意,特別是repo的值是自己建立的倉庫名稱不是倉庫型別,name寫是Library名稱。license只能寫bintray提供選擇型別,userOrg填寫bintray後臺建立organization。強調這個的原因是本人看了其他文章發現容易產生誤解的地方。

bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    pkg {
        repo = 'pluto'//自己bintray建立倉庫名字
        name = 'Pluto'//Library的名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ['MIT']//不能隨便寫,只能是倉庫建立時選擇的license type
        userOrg = 'minggoopen' //自己bintray建立的organization名稱
        publish = true // 是否是公開專案。

        version {
            name = '1.0'
            desc = 'High integrated development framework for Android applications.'
            released  = new Date()
            vcsTag = 'v1.0'
            attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
         }
    }
    configurations = ['archives']
}複製程式碼
5)配置maven的Install任務

這個部分重要的就會生成POM.xml,如果沒有執gradlew install就執行Studio 中Gradle欄的publishing下bintrayUpload會提示,沒有預設default pom.xml。

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                name 'Pluto Android'
                description 'High integrated development framework for Android applications.'
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'MIT'
                        url 'https://raw.githubusercontent.com/minggo620/Pluto-Android/master/LICENSE'
                    }
                }
                developers {
                    developer {
                        id 'minggo620'        //填寫bintray或者github的使用者名稱
                        name 'minggo'         //姓名,可以是中文
                        email 'minggo8en@gmail.com'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}複製程式碼
6)配置原始碼和文件任務

記得在以下響應地方新增 failOnError false,否則出現install執行出現build failed。

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    failOnError false //必須新增以免出錯
    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
}複製程式碼
7)這是我Library的Gradle完整配合
apply plugin: 'com.android.library'
apply plugin: 'android-apt'
apply from: "dependencies.gradle"
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

def siteUrl = 'https://github.com/minggo620/Pluto-Android'   // 專案的主頁
def gitUrl = 'https://github.com/minggo620/Pluto-Android.git'   // Git倉庫的url
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

version = "1.0"
group = "com.minggo"

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.3"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        consumerProguardFiles 'proguard-rules.pro'
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    pkg {
        repo = 'pluto'//自己bintray建立倉庫名字
        name = 'Pluto'//Library的名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ['MIT']//不能隨便寫,只能是倉庫建立時選擇的license type
        userOrg = 'minggoopen' //自己bintray建立的organization名稱
        publish = true // 是否是公開專案。

        version {
            name = '1.0'
            desc = 'High integrated development framework for Android applications.'
            released  = new Date()
            vcsTag = 'v1.0'
            attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
        }
    }
    configurations = ['archives']
}

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // Add your description here
                name 'Pluto Android'
                description 'High integrated development framework for Android applications.'
                url siteUrl
                // Set your license
                licenses {
                    license {
                        name 'MIT'
                        url 'https://raw.githubusercontent.com/minggo620/Pluto-Android/master/LICENSE'
                    }
                }
                developers {
                    developer {
                        id 'minggo620'        //填寫bintray或者github的使用者名稱
                        name 'minggo'         //姓名,可以是中文
                        email 'minggo8en@gmail.com'
                    }
               }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
task javadoc(type: Javadoc) {
    failOnError false
    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
}複製程式碼

四.執行install和upload

window和mac命令有些不一樣,mac命令前邊加./再敲命令。以下是window執行方式。

1.確保Gradle已經安裝

在studio中 Terminal中執行檢視安裝情況,如果沒有會自動安裝。

gradlew -v複製程式碼

安裝情況如下:

我是如何將Pluto作為library分享到jCenter
Gradle安裝情況

2.執行install任務
gradlew install複製程式碼

結果如下:

:Pluto:bundleRelease UP-TO-DATE
:Pluto:javadoc UP-TO-DATE
:Pluto:javadocJar UP-TO-DATE
:Pluto:sourcesJar UP-TO-DATE
:Pluto:install                 

BUILD SUCCESSFUL複製程式碼
3.執行upload任務
gradlew bintrayUpload複製程式碼

1分鐘後結果如下:

:Pluto:install
:Pluto:bintrayUpload

BUILD SUCCESSFUL

Total time: 1 mins 33.999 secs
複製程式碼

進入bintray的Organization倉庫管理後臺找到自己的對應的倉庫發現一個package如下圖

我是如何將Pluto作為library分享到jCenter
Paste_Image.png

進入Package進行看到上傳後的結果以下兩個紅色框框關鍵資訊
我是如何將Pluto作為library分享到jCenter
Pluto上傳後

如果是未釋出將會出現一下link提示,這時就可以點選提交稽核了。
我是如何將Pluto作為library分享到jCenter
Paste_Image.png

完成這一步剩下的就是郵箱等待了。3個小時後...

我是如何將Pluto作為library分享到jCenter
Paste_Image.png

六.文章總結

就這樣,我的Android開發框架Puto做了Library分享到了jCenter。以後每次更新就只需要修改gradle的compile 'com.minggo:Pluto:1.0'。對於使用Pluto框架的開發者來說就不必再去github下載原始碼拷貝到自己的專案,想必是一件很cool的事。是否,也有了分享自己的Library到JCenter的衝動了?
Gradle配置和Pluto框架gitHub下載地址github.com/minggo620/P…

我是如何將Pluto作為library分享到jCenter
微信公眾號:minggo_dev

【原創出品 未經授權 禁止轉載】
【歡迎微友分享轉發 禁止公號等未經授權的轉載】

相關文章