当我们的 library 依赖第三方的aar文件的时候,在打包发布我们的library到maven仓库的时候, 第三方的aar文件是不会打包进去的,这个时候去引用我们的 library 库,就会报找不到第三方库中的 类 的问题,从而异常。
如下图,module 工程 Profiling 引用了 很多的 aar 文件:
图1
module 工程 Profiling 配置的 maven 上传:
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = 'com.mei.profiling'
pom.artifactId = 'profiling'
pom.version = '1.0.0'
//上传到本地
repository(url: uri('../repo'))
}
}
}
复制代码
在主工程引用 Profiling 库:
implementation "com.mei.profiling:profiling:1.0.0"
复制代码
运行工程的时候,当使用图1中 aar 中相关的类时,就会报找不到类的异常。
这是因为,我们在上传 profiling 工程到maven的时候,Profiling/libs文件下的aar文件,不会一起打包到 profiling的aar文件中。
那怎么解决这个问题呢?有两种方式:
- 把第三方aar文件,放入到主工程的libs文件夹下
- 把第三方aar文件,上传到我们自己的maven库中
一、在主工程的libs文件夹下,增加第三方aar文件
在主工程的libs文件夹下,增加第三方aar文件,解决 library 工程引用第三方aar文件,打包的时候,第三方aar文件不会打包进去,从而在使用的时候,导致无法找到第三方库的类的问题。
1、在主工程的libs文件夹下,增加第三方aar文件
如:
2、修改build.gradle,引用第三方aar文件:
dependencies {
implementation fileTree(dir: "libs",includes: ['*.jar','*.aar'])
}
复制代码
增加 '.aar' 依赖文件类型。
这种方式可以解决找不到第三方类的问题,但这种不够优雅,封装一个 sdk,就是为了聚合代码,而现在这种,就不能达到这个目的了。
二、上传第三方aar到私有maven库,并引用
除了第一种方式解决之外,第二种方式就是把 第三方的 aar 文件上传到私有的 maven 库中,这样就可以直接通过依赖的方式引入 第三方 aar 文件了。
1、安装 Apache Maven 工具
1-1、安装 Apache Maven 工具
要想把 第三方的 aar 文件上传到 maven 私有库中,需要安装 Apache Maven 工具,如:
下载zip包即可。
下载成功之后,解压文件到自己的程序安装目录(任意目录),如我的安装目录为:
/Users/mei/Applications/apache-maven-3.8.1
解压就可以了,不需要其他的安装步骤。
1-2、配置环境变量
把 /Users/mei/Applications/apache-maven-3.8.1/bin 目录,配置到环境变量中,这样就方便使用 maven 相关的命令了。
配置完环境变量之后,执行命令:
mvn -v
如果能打印出 Apache maven 的版本信息,就说明环境变量配置成功了。如执行上面命令打印的信息如下:
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /Users/mei/Applications/apache-maven-3.8.1
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
2、上传第三方 aar 文件到私有 maven 库
安装好 Apache Maven 库之后,就可以通过 maven 相关的命令上传 第三方的 aar 文件了。步骤如下:
- 在 settings.xml 文件中,配置maven用户信息
- 执行上传命令
2-1、在 settings.xml 中配置私有 maven 的用户信息
把 aar 文件上传到私有 maven 库中,需要校验用户的信息,即 用户名和密码。
打开上面 Apache Maven 的安装目录,打开 conf 文件夹里面的 settings.xml 文件,如:
/Users/mei/Applications/apache-maven-3.8.1/conf/settings.xml
增加 server 标签,如:
<servers>
<server>
<id>releases</id>
<username>android-jinchuang</username>
<password>jinchuang</password>
</server>
<server>
<id>snapshots</id>
<username>android-jinchuang</username>
<password>jinchuang</password>
</server>
</servers>
复制代码
2-2、执行上传命令
mvn deploy:deploy-file -DgroupId=com.mei.aspectj -DartifactId=aspectj -Dversion=1.0.0 -Dpackaging=aar -Dfile=/Users/sentinel-annotation-aspectj-1.4.0.aar -Durl=https://xxx.com:8983/repository/maven-releases -DrepositoryId=releases 复制代码
参数说明:
mvn deploy:deploy-file
-DgroupId=com.mei.aspectj // groupId,可以按自己喜好定义
-DartifactId=aspectj // artifactId
-Dversion=1.0.0 //version 版本号
-Dfile=/Users/sentinel-annotation-aspectj-1.4.0.jar //jar包路径及jar包文件名
-Dpackageing=aar //上传文件的格式
-DpomFile=pom.xml // 重点在这, 必须单独上传jar中的pom.xml,如没有依赖其他的库,则可以不用添加
-DrepositoryId=release // 连接maven私服的登录名及密码, 在maven > settings.xml 中配置好的
-Durl=xxx.com:8983/repository/… //上传的私服路径及目录
执行上面的命令,如果成功的话,就会输出如下信息:
这就代表, aar 文件上传到 maven 成功了。打开 maven 仓库,在releases分组下,就可以看到我们上次的 aar 文件了。
下面就可以通过依赖引入的方式引入到我们的sdk了,如:
implementation 'com.mei.aspectj:aspectj:1.0.0'
复制代码
这样就非常优雅的解决第三方 aar 文件 的依赖问题。
参考博客: