如何发布具有一致版本控制的多个依赖 android 库?
How to release multiple dependent android librarys with consistent versioning?
给定一个多模块 gradle 项目,包括:
- 应用
- 图书馆A
- 图书馆B
- 库 C
在哪里
- app 依赖于 A、B、C
- B 依赖于 A
- C 依赖于 A
- A 没有依赖关系
你如何配置你的依赖项来执行 Maven 发布到 Maven 存储库(即 uploadArchives),以便所有工件(应用程序和库 A、B 和 C)都以相同的版本发布并依赖于相同的相应库的版本?
例如:
首先,依赖项如下所示
APP
compile project(':A')
compile project(':B')
compile project(':C')
B
compile project(':A')
C
compile project(':A')
这保证了当我构建项目时,所有库和应用程序都使用当前代码库进行编译。
我想做的是在 gradle.properties 中更新一个 属性,并让所有工件随该版本发布,依赖于该版本,并且仍然使用当前代码库构建(因为当前的代码库就是那个版本)
gradle.properties
PROJECT_VERSION=1.2.0
最终我希望发布的版本看起来像这样:
APP
compile ('com.my.groupid:A:1.2.0')
compile ('com.my.groupid:B:1.2.0')
compile ('com.my.groupid:C:1.2.0')
B
compile ('com.my.groupid:A:1.2.0')
C
compile ('com.my.groupid:A:1.2.0')
实现此目标的正确方法是什么?
你可以使用这样的东西。
APP
compile project(':A')
compile project(':B')
compile project(':C')
B
compile project(':A')
C
compile project(':A')
在顶层 build.gradle
使用:
ext{
VERSION_NAME = 1.1.2
}
然后在您的更新脚本中使用:
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = rootProject.ext.VERSION_NAME
//....other parts
}
}
}
}
定义一个任务,如:
task uploadAllArchives {
description 'Upload all modules to Maven Repository'
println ''
println '---------------------------------'
println 'Version: ' + version
println 'UPLOAD ALL ARCHIVES'
println '---------------------------------'
println ''
doLast{
println ''
println '---------------------------------'
println 'Version: ' + version
println 'UPLOAD ALL ARCHIVES FINISHED'
println '---------------------------------'
println ''
}
}
uploadAllArchives.dependsOn(
':libraryA:uploadArchives',
':libraryB:uploadArchives',
':libraryC:uploadArchives')
给定一个多模块 gradle 项目,包括:
- 应用
- 图书馆A
- 图书馆B
- 库 C
在哪里
- app 依赖于 A、B、C
- B 依赖于 A
- C 依赖于 A
- A 没有依赖关系
你如何配置你的依赖项来执行 Maven 发布到 Maven 存储库(即 uploadArchives),以便所有工件(应用程序和库 A、B 和 C)都以相同的版本发布并依赖于相同的相应库的版本?
例如:
首先,依赖项如下所示
APP
compile project(':A')
compile project(':B')
compile project(':C')
B
compile project(':A')
C
compile project(':A')
这保证了当我构建项目时,所有库和应用程序都使用当前代码库进行编译。
我想做的是在 gradle.properties 中更新一个 属性,并让所有工件随该版本发布,依赖于该版本,并且仍然使用当前代码库构建(因为当前的代码库就是那个版本)
gradle.properties
PROJECT_VERSION=1.2.0
最终我希望发布的版本看起来像这样:
APP
compile ('com.my.groupid:A:1.2.0')
compile ('com.my.groupid:B:1.2.0')
compile ('com.my.groupid:C:1.2.0')
B
compile ('com.my.groupid:A:1.2.0')
C
compile ('com.my.groupid:A:1.2.0')
实现此目标的正确方法是什么?
你可以使用这样的东西。
APP
compile project(':A')
compile project(':B')
compile project(':C')
B
compile project(':A')
C
compile project(':A')
在顶层 build.gradle
使用:
ext{
VERSION_NAME = 1.1.2
}
然后在您的更新脚本中使用:
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = rootProject.ext.VERSION_NAME
//....other parts
}
}
}
}
定义一个任务,如:
task uploadAllArchives {
description 'Upload all modules to Maven Repository'
println ''
println '---------------------------------'
println 'Version: ' + version
println 'UPLOAD ALL ARCHIVES'
println '---------------------------------'
println ''
doLast{
println ''
println '---------------------------------'
println 'Version: ' + version
println 'UPLOAD ALL ARCHIVES FINISHED'
println '---------------------------------'
println ''
}
}
uploadAllArchives.dependsOn(
':libraryA:uploadArchives',
':libraryB:uploadArchives',
':libraryC:uploadArchives')