组件化开发时会把一些基础库拉出来作为SDK让多个业务线共同使用,所以我们会把这些库打包成aar包然后上传至Maven仓库供业务方依赖使用。
1.了解下POM
POM(Project Object Model)指项目对象模型,用于描述项目构件的基本信息。一个有效的 POM 节点中主要包含一下信息:
| 配置 | 描述 | 举例('com.squareup.retrofit2:retrofit.2.6.0') |
|---|---|---|
| groupId | 组织 / 公司的名称 | com.squareup.retrofit2:retrofit |
| artifactId | 组件的名称 | retrofit |
| version | 组件的版本 | 2,6.0 |
| packaging | 打包的格式 | aar/jar |
pom的作用
如果我们的aar库里面又依赖了其他的第三方库,我们在直接打包的时候其他第三方库是不会被打进我们的aar包里的,这个时候有三种处理方式
- 让业务方自己添加我们AAR包的第三方依赖,这种是不太好的也不方便。
- 通过工具(fataar)将第三方依赖打进我们的aar包里,这种也不太好,会出现依赖冲突需要去解决等问题
- 使用pom文件,依赖项配置用于定义项目所依赖的外部库。Maven会自动下载并管理这些依赖项。文件格式为
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.6.0</version>
<scope>implementation</scope>
</dependency>
2.使用Maven Pubilsh Plugin
maven publish 插件文档docs.gradle.org/7.3/usergui…
使用方法
新建一个gradle文件,配置如下
apply plugin: 'maven-publish'
afterEvaluate {
publishing {
publications {
maven(MavenPublication) {
groupId = ******
artifactId = '****'
if (Boolean.valueOf(IS_RELEASE)) { //IS_RELEASE是在其他地方统一的配置开关
version = VERSION_NAME
artifact(tasks.getByName("bundleReleaseAar")) //上传源码方法任务调用
} else {
version = VERSION_NAME + "-snapshop"
artifact(tasks.getByName("bundleDebugAar"))
}
artifact(androidSourcesJar)
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each {
if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {
println "dependency=${it.toString()}"
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
dependencyNode.appendNode('scope', 'implementation')
}
}
}
}
}
repositories {
maven {
if (Boolean.valueOf(IS_RELEASE)) {
url = MAVEN_RELEASE_URL
} else {
url = MAVEN_SNAPSHOT_URL
}
credentials {
username = MAVEN_USERNAME
password = MAVEN_PASSWORD
}
}
}
}
}
task androidSourcesJar(type: Jar) { //上传源码,对kotlin项目很有用
archiveClassifier.set('sources')
from android.sourceSets.main.java.srcDirs
}
然后在你需要使用的地方 apply from: "*****.gradle"也就是你的gradle文件就可以OK了。在需要上传的时候,点击gradle的publishing就会自动上传到你的maven仓库了
业务方在使用的时候直接依赖就可以了。