给定一个包含以下内容的多模块 gradle 项目:
- 应用
- 图书馆A
- 图书馆B
- 图书馆C
在哪里
- 应用程序依赖于 A、B、C
- B 依赖于 A
- C 依赖于 A
- A没有依赖
您如何配置您的依赖项以执行对 Maven 存储库的 Maven 发布(即 uploadArchives),以便所有 Artifact (应用程序和库 A、B 和 C)都以相同的版本发布并依赖于相同版本的相应的库?
例如:
首先,依赖关系如下所示
应用
compile project(':A')
compile project(':B')
compile project(':C')
B
compile project(':A')
C
compile project(':A')
这保证了当我构建项目时,所有库和应用程序都使用当前代码库进行编译。
我想做的是更新 gradle.properties 中的一个属性,并让所有 Artifact 随该版本发布,依赖于该版本,并且仍然使用当前代码库构建(因为当前代码库将是该版本)
gradle.properties
PROJECT_VERSION=1.2.0
最终我希望发布的版本看起来像这样:
应用
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')
实现此目标的正确方法是什么?
最佳答案
你可以使用这样的东西。
应用
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')
关于android - 如何以一致的版本控制发布多个依赖的android库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909285/