Flutter項(xiàng)目如何一鍵上傳aar至maven(Nexus)

首先湘今,建議參考此文章
https://cloud.tencent.com/developer/article/1912599

在進(jìn)入主題之前,請(qǐng)確保你的項(xiàng)目中已經(jīng)包含Android + Java + Fluuter + Dart等開發(fā)環(huán)境垃它,且已經(jīng)懂得如何使用Fluuter的本地依賴扶踊。

否則可以參考我的項(xiàng)目,先學(xué)會(huì)Android怎么配置Fluuter本地依賴:
https://github.com/yanjunhui2014/FlutterApp
https://github.com/yanjunhui2014/fz_flutter_share

以上2個(gè)項(xiàng)目需要拷貝至同一級(jí)目錄,而且由于Dart+FluuterSDK版本的原因营袜,可能會(huì)有一些兼容問題需要調(diào)試路捧。

但如果滿足以上條件关霸,則可以繼續(xù)往下。

但是我在添加完packageHelper.sh并且執(zhí)行之后鬓长,遇到如下問題谒拴。
1尝江、mvn指令不支持
原因:沒有安裝Maven環(huán)境
解決(mac電腦):https://wangxin1248.github.io/life/2020/02/mac-install-maven.html
windows電腦自己去找下怎么安裝maven+配置環(huán)境變量即可涉波。

2、修改配置后炭序,執(zhí)行packageHelper.sh啤覆,但是maven始終無法上傳成功
原因:


image.png

解決:
可以自己手動(dòng)賦值,推薦賦值規(guī)則如下
例如你的maven地址是

com.tencent.tinker:tinker-android-lib:0.0.1

那么

groupId="com.tencent.tinker"
artificatId="tinker-android-lib"

只是舉一個(gè)例子惭聂,學(xué)會(huì)舉一反三窗声,不要生搬硬套

3、改完之后辜纲,Nexus上能夠查看到相應(yīng)的maven庫(kù)笨觅,但是,始終無法拉取成功耕腾,原因未知


image.png

當(dāng)然见剩,也有可能你運(yùn)氣好,這里就通過了扫俺。如果你遭遇和我一樣苍苞,就繼續(xù)往下看。

分析來分析去狼纬,我也不知道是啥原因?qū)е碌母恰N揖妥聊ミ@packageHelper.sh到底是干啥的。好在代碼不多疗琉,就湊合著看了看冈欢。發(fā)現(xiàn)它只做了2件事。

第一盈简、build aar涛癌。
第二、上傳aar送火。

build aar肯定是不會(huì)有問題的拳话,那就把重點(diǎn)放在上傳上。
我們來分析下.sh中的代碼

echo "aar打包完成种吸,開始上傳maven..."

#方法 修改所有pom文件的名稱
function renameAllPomArtifactId() {
  find build/host/outputs/repo -name "*.pom" | while read -r file
  do
    sed -i -e "s/>$1</>$2</g" $file
  done
}


#第一次遍歷repo文件夾下所有后綴名為.aar的文件
find build/host/outputs/repo -name "*.aar" | while read -r file
do
  #當(dāng)前aar文件所在的目錄
  currDirName=$(dirname $file)
  aarName=$file
  #當(dāng)前aar文件對(duì)應(yīng)的pom文件(aar和pom一一對(duì)應(yīng))
  pomName="$currDirName/$(basename $file .aar).pom"

  #從pom文件中讀取出groupId信息
  groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
  #從pom文件中讀取出artifactId信息米奸,但是此時(shí)的artifactId并不是我們?cè)趐roperties中配置的丈咐,而是編譯器自動(dòng)生成的
  artifactId=$(awk '/<artifactId>[^<]+</artifactId>/{gsub(/<artifactId>|</artifactId>/,"",$1);print $1;exit;}' $pomName)

  #修改artifactId為在properties中配置的
  renameAllPomArtifactId $artifactId $projectName
done

#第二次遍歷repo文件夾下所有后綴名為.aar的文件,為什么要二次遍歷谷婆?
#為了防止pom中的artifactId還沒有全部修改完便被上傳到maven引起的問題
find build/host/outputs/repo -name "*.aar" | while read -r file
do
  #當(dāng)前aar文件所在的目錄
  currDirName=$(dirname $file)
  aarName=$file
  #當(dāng)前aar文件對(duì)應(yīng)的pom文件(aar和pom一一對(duì)應(yīng))
  pomName="$currDirName/$(basename $file .aar).pom"

  #從pom文件中讀取出groupId信息
  groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
  #從pom文件中讀取出artifactId信息,此時(shí)已經(jīng)修改為properties中配置的
  artifactId=$(awk '/<artifactId>[^<]+</artifactId>/{gsub(/<artifactId>|</artifactId>/,"",$1);print $1;exit;}' $pomName)

  echo "正在上傳 = $aarName ..."

可以看到饰序,這一段代碼中,有修改文件名的作用,那么我推測(cè)可能就是這個(gè)過程降允,導(dǎo)致我aar最終無法從maven上同步的原因。
既然如此艺糜,那么就開干剧董,把這一段代碼刪掉,然后做一定量適當(dāng)?shù)母膶懀纯茨懿荒艹晒Α?/p>

下面貼上我寫的 uploadMaven.sh

注意

/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release
一定要替換成你們自己的地址
aarFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.aar"
pomFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.pom"
#!/bin/bash
# shellcheck disable=SC2086
# shellcheck disable=SC2001
# shellcheck disable=SC2005
# shellcheck disable=SC2016

#引入配置文件
PROPERTIES="package.properties"
#maven依賴三要素
packageNameV=""
projectNameV=""
buildVersionV=""

#maven倉(cāng)庫(kù)地址
mavenRepositoryV=""
mavenSnapshotsV=""

#是否為release版本
isRelease=$1

#當(dāng)前使用的倉(cāng)庫(kù)破停,根據(jù)isRelease的不同而不同
usedMavenRepo=""

#讀取配置文件信息并做容錯(cuò)處理
if [ -f "$PROPERTIES" ]
then
  . $PROPERTIES
  packageNameV=$packageName
  projectNameV=$projectName
  buildVersionV=$buildVersion

  if [ -z "$packageNameV" ]; then
      echo ERROR:"package.properties文件中沒有配置packageName!"
      exit 1
  fi

  if [ -z "$projectNameV" ]; then
      echo ERROR:"package.properties文件中沒有配置projectName!"
      exit 1
  fi

  if [ -z "$buildVersionV" ]; then
      echo ERROR:"package.properties文件中沒有配置buildVersion!"
      exit 1
  fi

  mavenRepositoryV=$mavenRepository
  mavenSnapshotsV=$mavenSnapshots

  if [[ -z "$mavenRepositoryV" ]] && [[ -z "$mavenSnapshotsV" ]]
  then
    echo ERROR:"請(qǐng)檢查是否在package.properties中正確配置了maven倉(cāng)庫(kù)信息!"
      exit 1
  fi
else
  echo ERROR:"請(qǐng)先根據(jù)要求配置package.properties文件然后執(zhí)行該腳本!"
  exit 1
fi

#打包前清理
echo "flutter clear..."
flutter clean

#打包前獲取依賴
echo "flutter pub get..."
flutter pub get

echo "flutter pub get..."

#根據(jù)isRelease執(zhí)行不同的打包邏輯
#if [ $isRelease = "true" ]
#then
  #打包release版本翅楼,避免生成多余的包導(dǎo)致資源浪費(fèi),//--target-platform android-arm ,--no-profile --no-debug
  flutter build aar --build-number "$buildVersionV" --no-profile --no-debug
#else
#  #打包debug版本,避免生成多余的包導(dǎo)致資源浪費(fèi),//--target-platform android-arm , --no-profile --no-release
#  flutter build aar --build-number "$buildVersionV" --no-profile --no-release
#fi

project_path=$(cd `dirname $0`; pwd)

aarFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.aar"
pomFile="$project_path/build/host/outputs/repo/com/example/ai_teacher_flutter_module/flutter_release/$buildVersion/flutter_release-$buildVersion.pom"

echo "打包完成"
echo "打包指令 deploy:deploy-file -DgroupId=$packageName -DartifactId=$projectName -Dpackaging=aar Dversion=$buildVersionV Dfile=$aarFile DpomFile=$pomFile -Durl="

  #執(zhí)行上傳maven倉(cāng)庫(kù)命令
  mvn deploy:deploy-file \
  -DgroupId=$packageName \
  -DartifactId=$projectName \
  -Dpackaging=aar \
  -Dversion=$buildVersion \
  -Dfile=$aarFile \
  -DpomFile=$pomFile \
  -Durl=http://admin:admin123@10.10.1.211:8081/nexus/content/repositories/releases/

finishEcho $packageNameV $projectName

另外貼上package.properties

projectName=flutter_release
packageName=com.example.ai_teacher_flutter_module
buildVersion=3.0
mavenRepository=http://admin:admin123@youServerIp:8081/nexus/content/repositories/releases/
mavenSnapshots=http://admin:admin123@youServerIp:8081/nexus/content/repositories/snapshots/

然后:在項(xiàng)目終端(Terminal)中執(zhí)行

uploadMaven.sh

若出現(xiàn) zsh: permission denied: xxx
則使用 chmod u+x *.sh 解決

項(xiàng)目中添加依賴:

implementation 'com.example.ai_teacher_flutter_module:flutter_release:3.0'

同步即可真慢,問題解決毅臊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市黑界,隨后出現(xiàn)的幾起案子管嬉,更是在濱河造成了極大的恐慌,老刑警劉巖朗鸠,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚯撩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡童社,警方通過查閱死者的電腦和手機(jī)求厕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扰楼,“玉大人呀癣,你說我怎么就攤上這事∠依担” “怎么了项栏?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蹬竖。 經(jīng)常有香客問我沼沈,道長(zhǎng),這世上最難降的妖魔是什么币厕? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任列另,我火速辦了婚禮,結(jié)果婚禮上旦装,老公的妹妹穿的比我還像新娘页衙。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布店乐。 她就那樣靜靜地躺著艰躺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眨八。 梳的紋絲不亂的頭發(fā)上腺兴,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音廉侧,去河邊找鬼页响。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伏穆,可吹牛的內(nèi)容都是我干的拘泞。 我是一名探鬼主播纷纫,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼枕扫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辱魁?” 一聲冷哼從身側(cè)響起烟瞧,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎染簇,沒想到半個(gè)月后参滴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锻弓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年砾赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片青灼。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暴心,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杂拨,到底是詐尸還是另有隱情专普,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布弹沽,位于F島的核電站檀夹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏策橘。R本人自食惡果不足惜炸渡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丽已。 院中可真熱鬧蚌堵,春花似錦、人聲如沸促脉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宫仗,卻和暖如春够挂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕夫。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工孽糖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毅贮。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓办悟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滩褥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子病蛉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容