日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

巧用 GitHub 创建自己的私人 Maven 仓库,及一些开发Library的建议

發(fā)布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧用 GitHub 创建自己的私人 Maven 仓库,及一些开发Library的建议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于本人精力有限,如果內(nèi)容有更新可能無法及時更新其他渠道的內(nèi)容,請移步簡書 查看文章

2014年中的時候,當時國內(nèi)使用 Android Studio 的人還沒有很多,很多人還沒處理嘗鮮的時候我開始把公司的項目遷移到 Android Studio 上了,開始了挺長一段踩坑的日子,開始接觸到了 Gradle,才開始了解到使用它來管理項目的依賴庫,由于在過程中有不少第三方庫是沒有將依賴包發(fā)布到 jCenter / Maven Central ,而且個人并不太喜歡把一整個開源項目添加到項目中,導(dǎo)致經(jīng)常使用一些非官方倉庫,從而可能給后續(xù)維護帶來一些問題。

例如:

  • 依賴庫可能有被做修改導(dǎo)致產(chǎn)生不必要的 Bug

  • 依賴庫被作者從倉庫中刪掉

  • 依賴庫更新不及時,升級依賴庫麻煩

  • 后續(xù)跟進的開發(fā)者無法得知依賴庫的來源

  • 等等一系統(tǒng)問題~

不地可以通過以下兩個解決方案解決:

  • 給作者提 issues 讓作者將庫提交到 jCenter / Maven Central

  • 自己 fork 一份代碼后提交到 JitPack 上

  • 其實在過程中一真會出現(xiàn)一些倉庫地址的 URL 是 GitHub 的地址。
    例如 Emojicon 庫,現(xiàn)在最新版本已經(jīng)發(fā)布到 jCenter 了:

    build.gradle

    ...allprojects {repositories {maven { url 'https://raw.githubusercontent.com/rockerhieu/mvn-repo/master/' }jcenter()} } ...

    app/build.gradle

    ...dependencies {...compile 'com.rockerhieu.emojicon:library:1.2' }

    最終定位到了這個倉庫 https://github.com/Goddchen/mvn-repo,后來對此進行了一些研究,了解到如何使用公共的 Git 倉庫發(fā)布依賴庫,后面我就把一些常用的庫自己編譯發(fā)布到自己的 GitHub 的 mvn-repo 倉庫上,同樣達到了相同的效果,并且更可控。

    發(fā)布一個依賴庫到 mvn-repo

    在 GitHub 創(chuàng)建 mvn-repo 倉庫

    這一步就不詳述了,相信大家 Git 和 GitHub 使用肯定比我還熟練。

    創(chuàng)建一個新的 Android Library 項目

    由于本人已經(jīng)不使用 Eclipse,所以肯定是使用 Android Studio。

    創(chuàng)建一個 BlankApp 項目,這個項目是自己在開發(fā)過程中為了優(yōu)化開發(fā)流程而寫的(之前的版本 被廢棄了,這個是重寫版,還在構(gòu)思中)

    這是目錄結(jié)構(gòu)

    . ├── BlankApp.iml ├── LICENSE ├── README.md ├── build │?? ├── generated │?? └── intermediates ├── build.gradle ├── examples │?? ├── build │?? ├── build.gradle │?? ├── examples.iml │?? ├── libs │?? ├── proguard-rules.pro │?? └── src ├── gradle │?? └── wrapper ├── gradle.properties ├── gradlew ├── gradlew.bat ├── library │?? ├── build │?? ├── build.gradle │?? ├── gradle.properties │?? ├── library.iml │?? ├── libs │?? ├── proguard-rules.pro │?? └── src ├── local.properties └── settings.gradle

    library 就是一個 Android Library 的Module,examples 是一個Demo Module。

    使用 gradle-mvn-push 編譯腳本

    使用了Chris Banes 大神開發(fā)的 gradle-mvn-push Gradle 腳本,Chris Banes大神是 Android-PullToRefresh、PhotoView 等流行開源庫的作者。

    在項目根目錄創(chuàng)建 gradle.properties 文件

    COMPILE_SDK_VERSION=23 BUILD_TOOLS_VERSION=23.0.2 MIN_SDK_VERSION=14 TARGET_SDK_VERSION=23VERSION_NAME=0.0.1-alpha VERSION_CODE=1 GROUP=org.blankappPOM_DESCRIPTION= POM_URL=https://github.com/lijy91/BlankApp POM_SCM_URL=https://github.com/lijy91/BlankApp POM_SCM_CONNECTION=scm:git@github.com:lijy91/BlankApp.git POM_SCM_DEV_CONNECTION=scm:git@github.com:lijy91/BlankApp.git POM_LICENCE_NAME=The Apache Software License, Version 2.0 POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt POM_LICENCE_DIST=repo POM_DEVELOPER_ID=lijy91 POM_DEVELOPER_NAME=JianyingLi <lijy91@foxmail.com>RELEASE_REPOSITORY_URL=file:///Users/Lijy91/Documents/Projects/mvn-repo/ SNAPSHOT_REPOSITORY_URL=file:///Users/Lijy91/Documents/Projects/mvn-repo/snapshots/

    RELEASE_REPOSITORY_URL 和 SNAPSHOT_REPOSITORY_URL 兩個配置分別是正式版和快照版的本地路徑。如果版本號后帶有 -SNAPSHOT 編譯后會發(fā)布到 SNAPSHOT_REPOSITORY_URL 相應(yīng)的目錄下。

    在 library 創(chuàng)建 gradle.properties 文件

    app/library/gradle.properties

    POM_NAME=BlankApp Library POM_ARTIFACT_ID=blankapp POM_PACKAGING=aar

    在 library 模塊調(diào)用 gradle-mvn-push 腳本

    library/build.gradle

    ... apply from: 'https://raw.githubusercontent.com/lijy91/gradle-mvn-push/master/gradle-mvn-push.gradle'

    加在文件的未行即可,然后執(zhí)行 Sync Now 即可

    編譯到本地 Git 倉庫,并Push到遠程倉庫

    Build

    $ ./gradlew clean build uploadArchives

    執(zhí)行些命令后,會在 /Users/Lijy91/Documents/Projects/mvn-repo/ 創(chuàng)建相關(guān)的文件

    . ├── README.md └── org└── blankapp├── blankapp│?? ├── 0.0.1-alpha│?? │?? ├── blankapp-0.0.1-alpha-javadoc.jar│?? │?? ├── blankapp-0.0.1-alpha-javadoc.jar.md5│?? │?? ├── blankapp-0.0.1-alpha-javadoc.jar.sha1│?? │?? ├── blankapp-0.0.1-alpha-sources.jar│?? │?? ├── blankapp-0.0.1-alpha-sources.jar.md5│?? │?? ├── blankapp-0.0.1-alpha-sources.jar.sha1│?? │?? ├── blankapp-0.0.1-alpha.aar│?? │?? ├── blankapp-0.0.1-alpha.aar.md5│?? │?? ├── blankapp-0.0.1-alpha.aar.sha1│?? │?? ├── blankapp-0.0.1-alpha.pom│?? │?? ├── blankapp-0.0.1-alpha.pom.md5│?? │?? └── blankapp-0.0.1-alpha.pom.sha1│?? ├── maven-metadata.xml│?? ├── maven-metadata.xml.md5│?? └── maven-metadata.xml.sha1└── ...

    Push

    $ git add . $ git commit -am "Add BlankApp Library" $ git push -u origin master

    到此,一個私人的Maven倉庫已經(jīng)創(chuàng)建完成

    如何使用 mvn-repo

    1、只需將 mvn-repo 地址添加到您的 build.gradle 文件:

    repositories {maven { url 'https://raw.githubusercontent.com/lijy91/mvn-repo/master/' }jcenter() }

    2、在要集成的項目中的 build.gradle 中添加依賴,如下:

    dependencies {compile 'org.blankapp:blankapp:0.0.1-alpha@aar' }

    對于自己開發(fā)第三方庫的一些建議

    盡量不依賴第三方庫

    我最早寫的一個基礎(chǔ)框架庫,就引用了一些個人認為比較好用的 JSON 解析庫,ORM庫,后來應(yīng)用在其他項目的時候發(fā)現(xiàn)有一些是在這個項目中是使用不到的,造成了耦合度過大,后面維護難度過大。所以建議盡量不要依賴,或者參考最后面兩個建議的做法。

    ARTIFACT_ID 不要使用 library,sdk等名稱

    如果 ArtifactId 使用的是 library,sdk 這種名字,編譯后生成的相關(guān)文件就會是 library.jar、sdk.jar 這種文件,不便于分辨。

    例如 FIR.im 的 SDK

    compile 'im.fir:sdk:latest.integration@aar'

    最終在 Android Studio 看到的 External Libraries 就會出現(xiàn)一個sdk.jar 的文件,如果你引用了多個 ArtifactId 為 library 的類庫,那就會出現(xiàn) library.jar、library1.jar 這樣的文件,根本無法分辨。

    后來在我的建議下修改為

    compile 'im.fir:fir-sdk:latest.integration@aar'

    多模塊

    以下是之前我對 Ping++ SDK 提的一些建議
    將基礎(chǔ)部分封裝為一個sdk 模塊,并提供統(tǒng)一的接口,然后支付寶,微信支付,百度錢包等根據(jù)sdk模塊提供的接口進行開發(fā),后面如果用戶需要接入或者升級支付平臺的內(nèi)容,即可以通過在 build.gradle 文件添加相應(yīng)平臺的依賴即可。

    在 build.gradle 使用時類似這樣子

    compile 'com.pingxx:pingxx-sdk:1.0.+' compile 'com.pingxx:pingxx-alipay:1.0.+' compile 'com.pingxx:pingxx-wxpay:1.0.+'

    避免引用后項目出現(xiàn)重復(fù)功能的庫

    這個問題估計是大多數(shù)項目都有出現(xiàn)的問題,例如有我的項目使用了 Fastjson 作為我的JSON解析庫,但我使用的HTTP庫 Retrofit 1.x 卻使用 Gson,這個時候我的項目里就引用了兩個同樣功能的庫,而且在我們不注意的時候,包括HTTP庫,圖片加載庫等等都有可能會有重疊,會大大增加我們APK的大小。

    后來Retrofit2解決了這個問題,它把數(shù)據(jù)轉(zhuǎn)換為獨立出來了,我們可以自由選擇自己的數(shù)據(jù)轉(zhuǎn)換庫,類似這樣

    com.squareup.retrofit2:converter-gson // Gson com.squareup.retrofit2:converter-jackson // Jackson com.squareup.retrofit2:converter-moshi // Moshi com.squareup.retrofit2:converter-protobuf // Protobuf com.squareup.retrofit2:converter-wire // Wire com.squareup.retrofit2:converter-simplexml // Simple XML com.squareup.retrofit2:converter-scalars // Scalars (primitives, boxed, and String)

    Enjoy~

    關(guān)于我

    剛離職幾天,這段時間在整理近兩年的工作經(jīng)驗,把自己一些經(jīng)驗心得分享給大家,希望不斷的優(yōu)化開發(fā)體驗,改進交付方式,將更多的時間花在學(xué)習(xí)以及生活上,也希望找一份為開發(fā)者服務(wù)的工作,坐標深圳。

    4年工作經(jīng)驗,近2年從事Android應(yīng)用開發(fā),熟悉從項目啟動到上線的完整流程,對產(chǎn)品及體驗有一定的理解,對Node.js及前端有著強烈的興趣,希望可以為優(yōu)化開發(fā)體驗改進交付軟件交付方式出一點微薄之力~

    總結(jié)

    以上是生活随笔為你收集整理的巧用 GitHub 创建自己的私人 Maven 仓库,及一些开发Library的建议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。