Android组件化多Module上传Maven

Posted by gentrio on 2017-08-20

问题

在给Android项目做组件化时,需要提交一个多Module的库到Maven仓库去,如果该库本地依赖了当前库中的子Module,则远程依赖该库的项目无法加载该库中的子Module,解析依赖的时候会报如下错误:

Failed to resolve: ***:unspecified

查看Maven仓库中的pom配置:

<dependency>
  <groupId>***</groupId>
  <artifactId>***</artifactId>
  <version>unspecified</version>
  <scope>***</scope>
</dependency>

解决方法

  1. 将子Module打成包 Android Library打成aar,Java Library打成jar文件,通过添加aar或者jar包依赖 来实现依赖管理
  2. 上传库到Maven仓库时,通过脚本将本地依赖替换成远程依赖

具体实现

方案一的实现 基本操作~

方案二的实现 基本操作~























—————————华丽丽的分割线——————————

主要记录一下方案二的具体实现

为了方便管理整个库的组和版本号 在根目录下的gradle.properties配置基本信息如:

  • GROUP
  • VERSION_NAME
  • GROUP_DESCRIPTION
  • RELEASE_REPOSITORY_URL
  • SNAPSHOT_REPOSITORY_URL
  • USERNAME
  • PASSWORD

在子Module目录下的gradle.properties配置具体子库的信息如:

  • POM_NAME
  • POM_ARTIFACT_ID
  • POM_PACKAGING
  • POM_DESCRIPTION

接下来就剩上传Maven仓库的相关脚本了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apply plugin: 'maven'

uploadArchives {
repositories {
mavenDeployer {

repository(url: project.RELEASE_REPOSITORY_URL) {
authentication(userName: project.USERNAME, password: project.PASSWORD)
}
snapshotRepository(url: project.SNAPSHOT_REPOSITORY_URL) {
authentication(userName: project.USERNAME, password: project.PASSWORD)
}

pom.project {
groupId = GROUP
artifactId POM_ARTIFACT_ID
version VERSION_NAME
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
}

pom.whenConfigured { pom ->
pom.dependencies.findAll { dep -> dep.groupId == rootProject.name }.collect { dep ->
dep.groupId = project.GROUP
dep.version = project.VERSION_NAME
dep.artifactId = rootProject.subprojects.find { project ->
project.name == dep.artifactId
}.POM_ARTIFACT_ID
}
}
}
}
}

在子Module下的build.gradle中apply上面的这个脚本即完成上传的配置,如果子Module比较多,可以直接在本目录的build.gradle中遍历添加apply。