Flutter项目如何一键上传aar至maven(Nexus)

首先,建议参考此文章
https://cloud.tencent.com/developer/article/1912599

在进入主题之前,请确保你的项目中已经包含Android + Java + Fluuter + Dart等开发环境,且已经懂得如何使用Fluuter的本地依赖。

否则可以参考我的项目,先学会Android怎么配置Fluuter本地依赖:
https://github.com/yanjunhui2014/FlutterApp
https://github.com/yanjunhui2014/fz_flutter_share

以上2个项目需要拷贝至同一级目录,而且由于Dart+FluuterSDK版本的原因,可能会有一些兼容问题需要调试。

但如果满足以上条件,则可以继续往下。

但是我在添加完packageHelper.sh并且执行之后,遇到如下问题。
1、mvn指令不支持
原因:没有安装Maven环境
解决(mac电脑):https://wangxin1248.github.io/life/2020/02/mac-install-maven.html
windows电脑自己去找下怎么安装maven+配置环境变量即可。

2、修改配置后,执行packageHelper.sh,但是maven始终无法上传成功
原因:


image.png

解决:
可以自己手动赋值,推荐赋值规则如下
例如你的maven地址是

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

那么

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

只是举一个例子,学会举一反三,不要生搬硬套

3、改完之后,Nexus上能够查看到相应的maven库,但是,始终无法拉取成功,原因未知


image.png

当然,也有可能你运气好,这里就通过了。如果你遭遇和我一样,就继续往下看。

分析来分析去,我也不知道是啥原因导致的。我就琢磨这packageHelper.sh到底是干啥的。好在代码不多,就凑合着看了看。发现它只做了2件事。

第一、build aar。
第二、上传aar。

build aar肯定是不会有问题的,那就把重点放在上传上。
我们来分析下.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
  #当前aar文件所在的目录
  currDirName=$(dirname $file)
  aarName=$file
  #当前aar文件对应的pom文件(aar和pom一一对应)
  pomName="$currDirName/$(basename $file .aar).pom"

  #从pom文件中读取出groupId信息
  groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
  #从pom文件中读取出artifactId信息,但是此时的artifactId并不是我们在properties中配置的,而是编译器自动生成的
  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
  #当前aar文件所在的目录
  currDirName=$(dirname $file)
  aarName=$file
  #当前aar文件对应的pom文件(aar和pom一一对应)
  pomName="$currDirName/$(basename $file .aar).pom"

  #从pom文件中读取出groupId信息
  groupId=$(awk '/<groupId>[^<]+</groupId>/{gsub(/<groupId>|</groupId>/,"",$1);print $1;exit;}' $pomName)
  #从pom文件中读取出artifactId信息,此时已经修改为properties中配置的
  artifactId=$(awk '/<artifactId>[^<]+</artifactId>/{gsub(/<artifactId>|</artifactId>/,"",$1);print $1;exit;}' $pomName)

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

可以看到,这一段代码中,有修改文件名的作用,那么我推测可能就是这个过程,导致我aar最终无法从maven上同步的原因。
既然如此,那么就开干,把这一段代码删掉,然后做一定量适当的改写,看看能不能成功。

下面贴上我写的 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仓库地址
mavenRepositoryV=""
mavenSnapshotsV=""

#是否为release版本
isRelease=$1

#当前使用的仓库,根据isRelease的不同而不同
usedMavenRepo=""

#读取配置文件信息并做容错处理
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:"请检查是否在package.properties中正确配置了maven仓库信息!"
      exit 1
  fi
else
  echo ERROR:"请先根据要求配置package.properties文件然后执行该脚本!"
  exit 1
fi

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

#打包前获取依赖
echo "flutter pub get..."
flutter pub get

echo "flutter pub get..."

#根据isRelease执行不同的打包逻辑
#if [ $isRelease = "true" ]
#then
  #打包release版本,避免生成多余的包导致资源浪费,//--target-platform android-arm ,--no-profile --no-debug
  flutter build aar --build-number "$buildVersionV" --no-profile --no-debug
#else
#  #打包debug版本,避免生成多余的包导致资源浪费,//--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="

  #执行上传maven仓库命令
  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/

然后:在项目终端(Terminal)中执行

uploadMaven.sh

若出现 zsh: permission denied: xxx
则使用 chmod u+x *.sh 解决

项目中添加依赖:

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

同步即可,问题解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容