【Maven學習】如何上傳jar或aar包至Maven私服,讓Android項目可以支持Maven庫在線依賴的方式來使用jar包

一、本地依賴方式

由於要使用第三方jar包。而第三方給的SDK是jar包,並沒有上傳到Maven庫,因此不支持Maven庫在線依賴,所以需要如下所示的,在項目中手動集成jar包。

在這裏插入圖片描述

然後在build.gradle中 導入剛纔的libs目錄

在這裏插入圖片描述

dependencies {
    api fileTree(include: ['*.jar'], dir: 'libs')
}

這種方式本人不喜歡,因爲習慣了使用Maven在線依賴的方式,因此想把這些jar包上傳到Maven私服上,然後通過Maven在線依賴的方式來使用這些第三方jar包。

二、將jar包上傳到Maven私服

2.1 登錄Maven私服並打開【3rd party】這個Respsitory

  1. 打開內部搭建的Maven私服,比如我們內部的Maven私服網站爲 http://xxx.xxxx.com:8081/nexus/
    在這裏插入圖片描述

2、點擊右上角的【LogIn】按鈕,進行登錄
在這裏插入圖片描述
3、登陸之後點擊左側列表中的【views/respsitories】–>【Respsitories】 顯示出所有的Respositories,然後以後點擊【3rd party】。
因爲我們要上傳的是第三方的jar包,所以就放在【3rd party】這個Respsitory裏面比較合適
在這裏插入圖片描述

點擊【Browse Storage】可以看到所有已經上傳到這個【3rd party】這個Respsitory裏面jar包或者aar包

在這裏插入圖片描述

2.2 在【3rd party】這個Respsitory中上傳第三方的jar包

  • 點擊【Artifact Upload】面板,進行上傳jar包操作
    在這裏插入圖片描述
    填寫要上傳的jar包的相關信息,如下所示:

在這裏插入圖片描述

2.2.1 填寫【Select GAV Definition Source】

這一步主要是填寫,我們上傳jar包之後的一些產物在Maven中的屬性,比如groupid和artifactId被統稱爲“座標”是爲了保證項目唯一性而提出的,如果你要把你項目弄到maven本地倉庫去,你想要找到你的項目就必須根據這兩個id去查找。

  • 參數【GAV Definition】
    第一個參數【GAV Definition】可以選擇【GAV Parameters】和【From POM】兩種方式,我們選擇【GAV Parameters】
    在這裏插入圖片描述

如果選擇【From POM】的方式,界面如下

在這裏插入圖片描述

  • 參數【Group】
    groupId 是(Maven)項目的唯一標識。Group ID必須滿足 Java包名規範 ,這意味着是形如:org.apache.maven,org.apache.commons的格式。Maven不強制此規範,很多遺留的舊項目使用單個單詞作爲group ID。但是,很難用單個單詞作爲(新項目的)group ID,並將其提交到Maven中央倉庫中。
    你可以創建任意數量的子分組。一種比較好的來劃分groupId的顆粒度的方式是使用項目結構(package structure)。這是指,如果當前項目是一個多模塊(module)的項目,可以通過在父groupId的基礎上增加後綴的形式來定義,例如:

org.apache.maven,
org.apache.maven.plugins,
org.apache.maven.reporting

  • 參數【Artifact】
    artifact 是不帶版本號的jar的名字,唯一要求是使用小寫字母,且沒有特殊符號。如果這是一個第三方的jar包,必須使用其被髮布的包名。

例如:maven,commons-math

  • 參數【Version】

version 如果要發佈,可以選擇典型的數字和點號組成的版本號(1.0,1.1,1.0.1…)不要使用日期,因爲它們通常和SNAPSHOT版本號聯繫在一起。如果是一個第三方的artifact,你必須使用它提供的版本號,無論這些版本號看起來多麼奇怪,比如:2.0,2.0.1,1.3.1


我們這邊上傳的如下所示

在這裏插入圖片描述
那麼我們如果上傳成功的話,需要在Android 項目中的build.gradle中引用的話,用下面的形式
在這裏插入圖片描述

dependencies {
    api 'com.umeng.analytics:analytics-overseas:7.5.4'
}
  • 參數【Packaging】
    packaging【可選的,默認爲jar】:
    當不定義packaging時,maven會使用默認值jar。

在這裏插入圖片描述

2.2.2 填寫【Select Artifact(s) for Upload】

1、點擊【Select Artifact(s) to Upload】按鈕,選擇需要上傳的jar包。
在這裏插入圖片描述
2、點擊【Add Artifact】按鈕
點擊【Add Artifact】按鈕,自動生成下面的artifacts內容,上面的三個框空白了。
在這裏插入圖片描述
3、點擊【Upload Artifact(s)】按鈕,上傳成功,如下所示
在這裏插入圖片描述

4.上傳之後 點擊【Browse Storage】面板,然後點擊下【Refresh】按鈕刷新下,就可以查看上傳好的jar包
在這裏插入圖片描述

順便將另外的一個jar包也上傳上去,上傳好後,如下所示

在這裏插入圖片描述

三、Maven在線依賴方式

剛剛我們已經將兩個jar包上傳了,現在可以直接在線依賴它們了。
在這裏插入圖片描述
在這裏插入圖片描述

dependencies {
   //api fileTree(include: ['*.jar'], dir: 'libs')
    api 'com.umeng.analytics:analytics-overseas:7.5.4'
    api 'com.umeng.sdk:common-overseas:1.5.4'
}

在這裏插入圖片描述

sync完畢之後,查看【External Libraies】裏面就有剛剛Maven在線依賴引入的兩個jar包
在這裏插入圖片描述

這樣就方便多了!

四、關於上傳AAR包

(ps: 更新2020年4月8日)
今天有同事下載了一些第三方的aar包,如何放在項目本地使用,我立馬建議他將aar包上傳到Maven私服。

4.1 上傳aar

上傳私服如下圖所示
在這裏插入圖片描述
打包方式沒有aar
在這裏插入圖片描述
點擊上傳
在這裏插入圖片描述
上傳完後

在這裏插入圖片描述

4.2 引用上傳到Maven私服的AAR

4.2.1 錯誤使用方式

 implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
 implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'

這樣的寫法 無法下載剛剛上傳的AAR包

在這裏插入圖片描述

4.2.2 正確使用方式

參考博客:https://blog.csdn.net/u011424451/article/details/87378439
在這裏插入圖片描述
該博客的Nexus版本比我的版本新,我的版本暫時不支持這樣的方式,因此 使用
添加結尾 @aar 的方式來引用

在項目中使用如下的代碼,注意後面的@aar

 implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
 implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'

成功下載下來
在這裏插入圖片描述

以前在我之前的博客
【我的Android進階之旅】快速創建和根據不同的版本類型(Dev、Beta、Release)發佈Android 開發庫到Maven私服

上傳的AAR庫 不需要添加結尾 @aar 即可引用,是因爲上傳的腳本里面就寫好了打包方式爲aar
在這裏插入圖片描述
所以以腳本的形式上傳的 直接不需要結尾 @aar 即可引用。

4.2.3 關於添加後綴@aar的作用

博客:
https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
在這裏插入圖片描述
翻譯過來:
當您指定@後綴時,您將強制以您指定的格式(可能存在也可能不存在)下載庫。 這很有用,例如 當作者忘記指定庫是.aar和maven(或gradle,不確定)默認情況下將其視爲.jar。 如果指定了@後綴,則不再下載此庫的依賴項,因此您必須手動確保。

compile 'com.android.support:appcompat-v7:22.1.1@aar'
compile 'com.android.support:support-v4:22.1.1@jar'

爲了確保在指定@後綴時下載了庫的完整依賴樹,您必須以以下方式編寫它:

compile ('com.android.support:appcompat-v7:22.1.1@aar') {
    transitive = true
}

博客:https://www.cnblogs.com/lkc9/p/10813518.html 描述

一、.aar和.jar之間的區別。

‘.aar’可以包含源代碼和資源,但是’.jar’只能包含源代碼。

二、下載依賴庫時的區別

當您在項目的build.gradle中包含一個帶有後綴@arr的庫時,該庫將下載.aar後綴的庫文件。如果沒有,默認情況下將下載.jar的庫文件。當然,您也可以添加後綴@jar使下載

.jar的庫文件。

implementation 'com.android.support:appcompat-v7:22.1.1@aar'
implementation 'com.android.support:support-v4:22.1.1@jar'

五、參考資料

  • https://ouyangpeng.blog.csdn.net/article/details/78804637
  • https://ouyangpeng.blog.csdn.net/article/details/56872556
  • https://blog.csdn.net/qq_31459039/article/details/81361496
  • https://blog.csdn.net/u011424451/article/details/87378439
  • https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
  • https://www.cnblogs.com/lkc9/p/10813518.html

作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!
轉載請保留原文地址:https://blog.csdn.net/qq446282412/article/details/90482592
☞ 本人QQ: 3024665621
☞ QQ交流羣: 123133153
☞ github.com/ouyangpeng
[email protected]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章