天天看點

釋出庫到倉庫 maven jcenter JitPack [MD]

博文位址

我的GitHub 我的部落格 我的微信 我的郵箱
baiqiantao bqt20094 [email protected]

目錄

  • 通過 AS 建立 aar 的步驟
  • 使用 mavenDeployer 釋出到 GitHub 倉庫【推薦】
    • 建立項目
    • 配置項目
    • 建構并上傳
    • 上傳到 GitHub
    • 使用此庫
  • 使用 JitPack 釋出到自定義 maven 倉庫【推薦】
    • 建立及配置項目
    • 建立 GitHub release 版本
    • 送出 release 版本到 JitPack
    • 使用我們建立好的倉庫
    • 提示我版本過低解決方案
  • 使用 bintray-release 釋出到 Jcenter 倉庫【問題多】
    • 注冊 bintray 賬号
    • 建立 maven 倉庫
    • 項目配置
      • project 的配置
      • library 的配置
      • publish 閉包的屬性
    • 執行 gradlew 指令進行上傳
    • 關聯到 Jcenter 并等待稽核
  • 使用 gradle-bintray-plugin 釋出到 Jcenter 倉庫【麻煩】
    • 新增賬號
      • 定義 pom 并打包 aar
      • 打包 javadocjar 和 sourcejar
      • 上傳到 Jcenter 倉庫
    • 執行 gradle 任務
    • 請求稽核
    • 第三方引用

aar

檔案是 Google 為 Android 開發所設計的一種

library

格式,全名為

Android Archive Library

,與

Java Jar Library

不同的是,aar 除了 java code 之外還包含資源檔案。

1、建立一個新的普通 Android 工程(New Project 而不是 New Module),修改

module

層的

build.gradle

檔案,删除

applicationId

,将

apply plugin: 'com.android.application'

改成

apply plugin: 'com.android.library'

,然後同步

如果嫌上述操作太麻煩,可以這麼做:建立一個普通的 Android 工程,删除 app module,然後 new 一個 library module

2、執行 gradle 指令

gradle assembleRelease

,或者點選菜單 Build >

Make Project

,執行完以後可以看到

project-name/module-name/build/outputs/aar/

檔案夾下生成了

.aar

檔案

釋出庫到倉庫 maven jcenter JitPack [MD]

3、此

.aar

檔案除了包含 class 檔案外,還包含各種資源檔案,例如我們解壓後發現其包含如下内容:

釋出庫到倉庫 maven jcenter JitPack [MD]

參考1

參考2

參考3

Maven作為目前Java界最好的Dependency管理系統,把jar包托管到Maven中央庫,然後通過Maven Dependency使用是目前業界各種第三方庫的普遍做法。如果你想把自己開發的一些庫分享給别人使用,也可以遵循這樣的套路。Gradle可以看做是更新版的Maven,其使用了Maven最優秀的Dependency管理系統,但是,又規避了Maven的 build pipeline 的刻闆和xml格式配置檔案等缺點,可以說是目前Java界最好的建構工具。下面就來說說,如何使用Gradle把自己開發的jar包部署到Maven中央庫中。

建立一個普通的 Android 項目,然後建立一個 library。

因為這個項目中的 app 子產品實際上是用不到的,是以,我們可以直接删除 app 子產品,此時

settings.gradle

中隻有我們的 library :

include 'log'
           

接下來,在 library 中編寫你的代碼即可。

代碼編寫完成後,在 library 子產品的

build.gradle

末尾添加以下代碼:

//**********************************************************************   打包釋出
apply plugin: 'maven'

uploadArchives {
    def GITHUB_REPO_PATH = "../" //生成的aar檔案的儲存目錄,建議放在project根目錄,也可以放在任意目錄
    repositories.mavenDeployer {
        repository(url: "file://${file(GITHUB_REPO_PATH).absolutePath}")
        pom.project {  //引用時的格式為【implementation 'com.bqt:aop-log:1.0.0'】
            groupId 'com.bqt'
            artifactId 'aop-log'
            version '1.0.0' //當你的庫需要修改時,隻需更改此版本号即可
        }
    }
}

// 和源代碼一起打包
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}
artifacts {
    archives androidSourcesJar
}
           

在 Gradle > app > Tasks > upload > 輕按兩下 uploadArchives

釋出庫到倉庫 maven jcenter JitPack [MD]

或者使用指令行進入到項目的根目錄後,執行以下指令:

gradlew uploadArchives
           

然後等待編譯完成:

Executing tasks: [uploadArchives]
...
BUILD SUCCESSFUL in 6s
26 actionable tasks: 23 executed, 3 up-to-date
16:18:38: Task execution finished 'uploadArchives'.
           

編譯完成後會在你指定的目錄下生成以下四個檔案:

釋出庫到倉庫 maven jcenter JitPack [MD]

在 Github 上建立一個倉庫用于存放生成的 aar 等檔案,例如 [aop_log]

釋出庫到倉庫 maven jcenter JitPack [MD]

把倉庫

clone

到本地,将生成的 aar 檔案拷到這個倉庫中,當然也可以将整個工程拷貝到這個倉庫中(這樣的話項目源碼就可以和 aar 一起送出到一個項目中了),然後 add、commit、push。

釋出庫到倉庫 maven jcenter JitPack [MD]

當更新版本時,隻需将新版本的内容添加到倉庫即可,不要删除舊版本的内容:

釋出庫到倉庫 maven jcenter JitPack [MD]

在需要使用此庫的

project

build.gradle

中添加以下代碼:

allprojects {
    repositories {
        //... 【baiqiantao】為使用者名,【aop_log】為項目名,其他為固定值
        maven { url "https://raw.githubusercontent.com/baiqiantao/aop_log/master" }
    }
}
           

在需要使用此庫的module的

build.gradle

中添加如下依賴:

implementation 'com.bqt:aop-log:1.0.2'
           

然後就可以愉快的使用庫了。

官網

GitHub

官網文檔

Easy to use package repository for Git
Publish your JVM and Android libraries
Modification修改 to the standard标準 Maven plugin to be compatible相容 with android-library projects (aar).

支援 GitHub 和 碼雲 上的項目

jcenter

maven center

平台上釋出代碼需要注冊、登入、送出代碼、稽核.....等複雜冗長的流程,而

JitPack

實際上是一個自定義的 Maven 倉庫,不過它的流程極度簡化,在其平台上釋出項目無需注冊申請,隻需要輸入 Github 項目位址然後點選

get it

即可。

1、在 GitHub 上建立倉庫代碼,clone 項目到本地

2、在此倉庫中建立一個 Android 的項目,然後建立一個 library module,并删除 app 子產品

3、在項目的根目錄的

build.gradle

裡面添加:

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
           

可用的版本及使用條件詳見 官方文檔

注意,使用最新版的 gradle 時,很可能會因 JitPack 還沒有适配導緻失敗!

4、在 library 子產品的

build.gradle

apply plugin: 'com.github.dcendents.android-maven'
           

5、在 library 中編寫代碼,最後送出到 GitHub 倉庫中即可

送出代碼後傳回到 GitHub 倉庫後,點選

releases

建立一個釋出版本

釋出庫到倉庫 maven jcenter JitPack [MD]

填寫版本号、标題、描述、是否是預釋出等資訊,最後點選确定即可。

這時候我們就可以去 JitPack官網 操作了

拷貝GitHub上倉庫位址,例如 aop_log,将拷貝的位址粘貼到搜尋框,點選

Lookup

就會找到我們的項目:

釋出庫到倉庫 maven jcenter JitPack [MD]
釋出庫到倉庫 maven jcenter JitPack [MD]
釋出庫到倉庫 maven jcenter JitPack [MD]

上圖中有四個 TAB,分别為:

  • Releases

    :代表一個釋出版本,JitPack 不會自動幫我們建構,隻有第一次被使用者引用并建構完成才能使用
  • Builds

    :代表一次建構,JitPack 會自動幫我們建構,産生的版本不帶

    v

    ,例如

    0.1

    而非

    v0.1

  • Branches

    :代表某一分支,JitPack 不會自動幫我們建構
  • Commits

    :代表某一此送出,JitPack 不會自動幫我們建構

其中有3個重要的字段:

  • version

    :指你在

    Github

    上釋出項目時候填寫的

    release tag

    ,後面帶着你送出是添加的日志
  • log

    :JitPack編譯你的項目生成的日志檔案,綠色表示 ok,紅色表示編譯錯誤;點選圖示可以檢視詳細編譯資訊
  • status

    :表示目前項目的狀态,如果編譯通過顯示的是綠色的

    Get it

    ,表示可以使用,如果編譯有問題,那麼則顯示

    Report

    ,你可以點選

    Report

    去送出你的 log 并描述一下你的問題,Jitpack 會給你答複

當你的 status 為綠色他的

Get it

的時候,那麼說明是可以使用的。點選一下該按鈕,根據提示使用就可以了。

Jitpack 會為我們的項目生成一個帶版本資訊的小圖檔,點選此圖檔将顯示的代碼拷貝到你 GitHub 倉庫的

Readme.md

裡面去就可以顯示徽章了

當我們的庫更新時,這個徽章會自動顯示最新的版本。

1、根目錄

build.gradle

添加:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
}
           

2、在需要引用此庫的 module 的

build.gradle

implementation 'com.github.baiqiantao:aartest:0.4'
           

然後即可使用庫中的内容了

其他可能遇到的問題

我一切都是使用的最新版,但一直報錯,報錯資訊如下:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/jitpack/build/bqtutils/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':bqtutils'.
> Failed to apply plugin [id 'com.android.library']
   > Minimum supported Gradle version is 4.10.1. Current version is 4.8.1. If using the gradle wrapper, try editing the distributionUrl in /home/jitpack/build/gradle/wrapper/gradle-wrapper.properties to gradle-4.10.1-all.zip
           

解決方案:

  • 先降低

    gradle:3.3.0

    gradle:3.1.2

  • 同時降低

    gradle-4.10.1

    gradle-4.4

  • android-maven-gradle-plugin:2.1

    android-maven-gradle-plugin:2.0

  • 同步之後發現OK了,然後再一個個都更新到最新版就可以了!

實際體驗:從注冊到配置各種垃圾異常,新版本 AndroidStudio + gradle 根本不成功!純屬垃圾東西!浪費時間!

bintray 官網

倉庫位址

Super duper(極其出色的) easy way to release your Android and other artifacts to bintray.
This is a helper for releasing libraries to bintray. It is intended to help configuring stuff(材料) related to maven and bintray. At the moment(目前) it works with Android Library projects, plain(普通的) Java and plain Groovy projects, but our focus is to mainly support(主要支援) Android projects.

賬号資訊

[email protected]
baiqt
           

注意事項:

  • 注意,千萬不要直接使用官網中的位址去注冊,因為官網注冊預設是組織,有30天試用期,之後要付費,而且釋出時候各種問題,我們應該使用 正确的注冊位址 去注冊。如果不小心注冊了企業賬号,也可以登出再重新注冊個人賬号
  • 注意,這爛貨支援的郵箱不全,不支援帶數字的郵箱,用163和qq的都不行,實測gmail、sina、foxmail可以用
  • 注意,注冊的時候可能非常非常慢,如果耗時過長,可以重新再試一次

注冊完成後,需要郵箱激活,然後就可以登入了。

登入完成後會進入個人首頁面,看下自己的倉庫下面有沒有一個名為

maven

的倉庫(一般都沒有),如果沒有,我們需要建立一個名為

maven

的倉庫。

設定倉庫為

Public

(個人版隻能設為

Public

),Name填寫為

maven

,類型Type設定

Maven

,其他的随意。一般 Default Licenses 協定,選擇

Apache-2.0

,Description 描述,自由填寫。

然後點選Create,稍等幾秒鐘,就完成建立,然後回到首頁,在 Add New Repository 位置就可以看到建立的maven倉庫。

然後點選右上角頭像 -> Edit Profile -> API Key -> 輸入密碼,然後就能看到你一段 key 字元串,把這個 copy 下放一邊,一會上傳要用。

f863932f739376a6b5199793c9110ece9566b7a3
           

在項目的

build.gradle

中添加如下配置

1、添加

bintray-release

classpath

buildscript {
    //...
    dependencies {
        classpath 'com.novoda:bintray-release:0.9'
    }
}
           

2、為了能将統一的配置用在多個module中,我們可以添加一個 ext:

ext {
    userOrg = 'baiqt'//使用者名,确定你這裡用的是使用者名
    groupId = 'com.bqt'//Jcenter上的路徑
    publishVersion = '1.0.0'//版本号,如果需要更新,隻需修改下版本号就可以了,其他什麼都不用動
    repoName='maven' //倉庫名
    desc = '日志埋點' //描述
    website = 'http://www.cnblogs.com/baiqiantao' //網站
    licences = ['Apache-2.0'] //協定
}
           

1、在要上傳的 module 的

build.gradle

中添加如下配置:

apply plugin: 'com.novoda.bintray-release'
publish {
    artifactId = 'aop-log' //項目名稱
    userOrg = rootProject.userOrg
    groupId = rootProject.groupId
    publishVersion = rootProject.publishVersion
    repoName = rootProject.repoName
    desc = rootProject.desc
    website = rootProject.website
    licences = rootProject.licences
}
           

如果同時需要上傳多個moudle,例如編譯時注解的項目一般至少會包括注解處理器module、注解定義module,我們在上傳時,這2個module都要進行上傳。那麼這幾個moudle的配置是一樣的,唯一不同的就是publish中的

artifactId

,不同的module應該有它不同的名字。

最終引入的方式為:

implementation 'com.bqt:aop-log:1.0.0
           

2、解決常見問題的配置

android {
    //...
    lintOptions {//錯誤的時候不停止
        abortOnError false
    }

    allprojects {
        tasks.withType(JavaCompile) { //注釋中如果有中文,可能會出現異常,設定全局編碼
            options.encoding = "UTF-8"
        }

        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
            options.addStringOption('encoding', 'UTF-8')
        }
    }
}
           

有的建議這麼配置:

allprojects {
    //...
    tasks.withType(Javadoc) {
        options {
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}
           

publish

閉包包含所有這些屬性。預設值為空,除非另有規定:

  • userOrg

    : 包含用于上傳的組織名稱。[也就是bintray使用者名]
  • repoName

    : 代碼倉庫名稱。 預設設定為“maven”。[即:支援非maven名稱命名的maven類型倉庫]
  • groupId

    : 用于上傳的group id。
  • artifactId

    : 使用的artifactId。
  • publishVersion

    : 含有版本号的字元串。 不能以“-SNAPSHOT”結尾,因為bintray不支援snapshots。
  • licences

    : 項目的許可證辨別符清單。 辨別符可以在這裡找到:http://spdx.org/licenses/,預設值為

    ['Apache-2.0']

  • uploadName

    : bintray中包的顯示名稱。 如果沒有設定,

    artifactId

    将用于作為包名稱。
  • desc

    : 在bintray中項目的簡短描述。
  • website

    : 一個與該項目網址相關的URL字元串。可以在這裡使用Github 倉庫。
  • issueTracker

    : 配置該項目用于問題跟蹤的URL。 如果

    website

    包含

    'github.com'

    那麼這個屬性預設被設定為

    "${website}/issues"

  • repository

    : 配置項目VCS的URL。 如果

    website

    'github.com'

    ,則此項預設設定為

    "${website}.git"

  • autoPublish

    : 此布爾值定義上傳時是否自動釋出包。 如果配置為“假”,該包仍将被上傳到bintray,但您必須手動釋出。 預設值為“true”。
  • bintrayUser

    : 用于上傳的使用者名。
  • bintrayKey

    : 使用者帳戶的bintray API密鑰。 在這裡可以找到這個值的說明https://bintray.com/docs/usermanual/interacting/interacting_apikeys.html
  • dryRun

    : 如果設定為“true”,則将運作所有内容,但不會将包上傳到bintray。 如果“false”,那麼它将正常上傳。
  • publications

    : 用于上傳的publication名稱清單。 預設值為

    ['maven']

    ,這是這個插件為你建立的一個publication。 您可以定義自己的出版物,更多資訊在wiki頁面中。

執行下面的代碼即可上傳:

gradlew clean build bintrayUpload -PbintrayUser=baiqt -PbintrayKey=f863932f739376a6b5199793c9110ece9566b7a3 -PdryRun=false
           

其中:

  • user

    使用者名,确定你這裡用的是使用者名
  • key

    就是我們剛才的讓你儲存的key
  • dryRun

    為false代表要上傳

當運作完成,看到

BUILD SUCCESSFUL

就沒問題了,到此就上傳完成了。

注意:

  • 上傳時可能需要KXSW
  • 在上傳的過程中提示失敗為

    org.apache.http.conn.HttpHostConnectException: Connection to https://api.bintray.com refused

    ,這個是網絡的問題,多重新上傳幾次,可能是要上傳10多次
  • 上傳時可能會遇到各種各樣、各種各樣、各種各樣、各種各樣、各種各樣的異常,草泥馬!

上傳後通路

https://bintray.com/使用者名/maven

,例如 baiqt 即可看到我們上傳的項目了,你可以點選進去看該庫的一些資訊。

注意此時我們的庫還不能夠直接被引用,點選進去該庫,按照下圖,點選

Add To jcenter

釋出庫到倉庫 maven jcenter JitPack [MD]

然後随便寫一下對你該庫的描述,然後點選發送就可以了。接下來就是等 bintray 的從業人員稽核了,稽核通過會給你發送站内Message,并且

Add to Jcenter

那個按鈕就消失了。

你還可以根據你上傳的groupId,通路

https://jcenter.bintray.com/你的groupId

例如 baiqiantao

如果同時上傳了多個module,稽核成功後你會發現這幾個module都會被同步到jcenter上。

如果在bintray中找不到 add to Jcenter,可能是因為你注冊的是企業賬号,可以取消重新注冊為個人賬号

gradle-bintray-plugin 倉庫位址

android-maven-gradle-plugin 倉庫位址

android-maven-plugin 倉庫位址

參考

使用體驗:上傳個庫麻煩到喪心病狂、令人發指的地步,為什麼這樣垃圾的東西都能存在?

新增賬號等步驟和上面的一樣。

在 project 的

build.gradle

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
//classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
           

在要上傳的 module 的

build.gradle

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

一些共用參數:

def siteUrl = 'https://github.com/openproject/LessCode'                   // project homepage
def gitUrl = 'https://github.com/openproject/LessCode.git'                // project git
group = "com.jayfeng"                                                     // Maven Group ID
           

完整的

build.gradle

,請參考 build.gradle

上傳到 jcenter 至少需要四個檔案,除了打包的 aar 之外,還需要 pom 和 javadoc、source,否則是通不過jcenter稽核的,不過這些我們都可以用腳本生成:

install {
    repositories.mavenInstaller {
        pom {
            project {
                packaging 'aar'
                name 'Less Code For Android'                              // project title
                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 'jayfeng'                                     // your user id (you can write your nickname)
                        name 'jian.feng'                                 // your user name
                        email '[email protected]'                         // your email
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
           

這兩個也是上傳到jcenter必須要的:

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
}
           

上傳到

jcenter

的網站 BinTray,需要使用者驗證,需要2個值:

bintray.user=openproject
bintray.apikey=c5434272d522d35d1a0123459981225564155753
           

因為這個屬于個人隐私,一般不能傳到網上去,是以需要在記錄到 LessCode 下的

local.properties

中(利用

gitignore

忽略這個檔案到git),然後腳本再從

local.properties

中讀取這兩個值:

Properties properties = new Properties()
boolean isHasFile = false
if (project.rootProject.file('local.properties') != null){
    isHasFile = true
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
bintray {
    user = isHasFile ? properties.getProperty("bintray.user") : System.getenv("bintray.user")
    key = isHasFile ? properties.getProperty("bintray.apikey") : System.getenv("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "lesscode"                                                 // #CONFIG# project name in jcenter
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}
           

根據上面的

build.gradle

,會産生幾個特别的

gradle

任務,通過

gradew

執行這些任務即可:

gradew javadocJar
gradew sourcesJar
gradew install
gradew bintrayUpload
           

或者通過 AS 的最右邊欄的 Gradle 視窗分别可視化操作,點選執行。

當 bintrayUpload 成功之後,在 我的首頁 右下部分 Latest Activity 塊,會看到你送出了一個項目,從這 Latest Activity 清單中點選你的項目,進入 詳情頁,找到 Maven Central 标簽,滑鼠放上去它會提示你去送出稽核,點選進入後,随便寫什麼都可以了。

隻要上面沒問題,一般稽核很快,幾個小時就差不多了。

我的情況稍微波折一點,第一個版本0.0.1沒有傳javadocjar和sourcejar,等了半天,管理者站内信通知稽核失敗,再傳的話需要更新到0.0.2,否則0.0.1已經存在不能重複上傳。

0.0.2版本上傳後,等了半天,管理者告訴我0.0.2版本OK了,但是0.0.1版本還是沒上傳,于是我找了找能不能删了0.0.1版本,是可以删除的,這樣的話其實前面沒必要更新到0.0.2了,删了重新上傳0.0.1也是可以的。

删了之後,還是要按上面的步驟重新發請求稽核,等了幾個小時就通過了。

這次稽核通過了,後面更新就不用再稽核了。

implementation 'com.jayfeng.lesscode:lesscode-core:0.1.2'
           

2020-04-15

本文來自部落格園,作者:白乾濤,轉載請注明原文連結:https://www.cnblogs.com/baiqiantao/p/12704510.html