实现目标:在jenkins上构建以后能够自动发布aar到指定仓库
背景:项目是android项目,且存在多个module,我们都知道module在编译后会生产aar包,我们就是要在构建完成后能够自动把所有module下的aar包都发布到指定仓库中。
话不多说,直接上脚本
type nul>uploadaar.gradle
"C:\Program Files\Git\usr\bin\echo"
'//uploadaar'>uploadaar.gradle
"C:\Program Files\Git\usr\bin\sed" -i '$a apply plugin:
'"'"'maven'"'"' \n uploadArchives {\nrepositories {\nmavenDeployer
{\nrepository(url: uri(url2)) {\npom.project {\ngroupId
'"'"'tuxiaolong'"'"'\nartifactId
'"'"'thirdparty-release'"'"'\nversion '"'"'2.0.2'"'"'\npackaging
'"'"'aar'"'"'}}}}}\nartifacts{\narchives (file(url3)){}\n}'
uploadaar.gradle
gradle -b uploadaar.gradle -P url2=./repository -P
url3=./thirdparty/build/outputs/aar/thirdparty-release.aar
uploadArchives
总共4条命令,显示方便,每条命令之间用换行隔开了,现在解释一下每一条命令的含义
第一条:创建一个uploadaar.gradle文件,我们发布aar的代码都会写入到这个文件当中
第二条:在文件里写入“//uploadaar”,echo是命令,'//uploadaar'>uploadaar.gradle的意思是
把//uploadaar写入到uploadaar.gradle文件当中
第三条:把发布aar的代码写入到uploadaar.gradle中,命令是sed -i '$a xxx'
uploadaar.gradle。xxx就是要插 入的发布代码
第四条:执行uploadArchive发布的task,其中有几个参数需要解释,这些参数可以在gradle
-help看到解释,本人也是看了help才找到这些命令,网上很少有说,所以还是鼓励大家遇到命令不会可以先help下。
-b.参数指定需要解析执行的.gradle文件,默认是build.gradle,但是我们的项目里已经有build.gradle文
件,如果在该build.gradle中插入不会有什么错误,但是构建的时候会把整个项目构建一遍,时间太长,而且构建的事情jenkins已经做了我们要做的只是发布构建完成后打出来的aar包没必要再构建一次。所以这里就新建了一个uploadaar.gradle,专门用于发布aar
-P.参数增加一个属性,我们这里增加了两个url2和url3,分表是发布的目录仓库和需要发布的aar包,这个
在发布的代码中会用到,下面会解释。
uploadArchive.我们在uploadaar.gradle里面写的发布aar的task,我们这里需要执行该task
解释完了4条命令,下面再解释一下发布aar的代码,我们把第三条命令的代码整理一下就是这样:
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri(url2)) {
pom.project {
groupId 'haotiantidu'
artifactId 'modulename-release'
version '2.0.2'
packaging 'aar'
}
}
}
}
}
artifacts{
archives (file(url3)){}
}
上面就是所有的发布aar的代码,如何发布aar网上有很多,发布到远程或者设定用户名密码,这里不讲这些。我们可以在这里看到url2和url3,这两个参数就是我们第四条命令里面设定的两个参数。
至此如果我们需要发布多个aar,只需要在脚本里加多个gradle -b uploadaar.gradle -P
url2=xxx -P url3=yyy
uploadArchives命令,yyy换成各个module的build/outputs/aar/xxxx.aar,xxx换成module对应的远程仓库或本地仓库。
另外介绍一个gradle的-p
参数,这个参数表示执行gradle命令的项目目录,比如我们设置成项目a的目录,则gradle会在项目a的根目录里找build.gradle并执行解析。