Android 库 - 使用 Gradle 将多个变体发布到本地 Maven 存储库
Posted
技术标签:
【中文标题】Android 库 - 使用 Gradle 将多个变体发布到本地 Maven 存储库【英文标题】:Android Library - Publish Multiple Variants to Local Maven Repository using Gradle 【发布时间】:2014-09-30 17:16:32 【问题描述】:我正在使用 android Gradle 插件 0.13.2、Android Studio 0.8.11、Gradle 2.1 和 maven 插件。
我想通过一个命令(任务)将我的 Android 库的多个变体(风味 + 构建类型)安装到本地 Maven 存储库。
目前 Android Gradle 插件 0.13.2 允许我设置 publishNonDefault 标志以发布所有变体,但正如文档所述,它将使用与 Maven 存储库不兼容的分类器发布变体。
我现在的解决方法是使用 defaultPublishConfig "myVariant" 并针对我拥有的每个变体进行更改。
apply plugin: 'com.android.library'
apply plugin: 'maven'
android
defaultPublishConfig "myVariant"
.
.
.
task installArchives(type: Upload)
repositories.mavenInstaller
configuration = configurations.getByName(Dependency.DEFAULT_CONFIGURATION)
pom.groupId = "com.company"
pom.artifactId = "mylibrary"
pom.version = "1.0.0-myVariant"
我希望有一个任务可以将所有变体正确发布到本地 Maven 存储库。
【问题讨论】:
【参考方案1】:为了解决这个问题,我必须为每个变体创建一个上传任务,并使它们相互依赖,并依赖于启动流程的主任务。
apply plugin: 'com.android.library'
apply plugin: 'maven'
android
.
.
.
// Master task that will publish all variants
def DefaultTask masterTask = project.tasks.create("installArchives", DefaultTask)
android.libraryVariants.all variant ->
variant.outputs.each output ->
// Configuration defines which artifacts will be published, create one configuration for each variant output (artifact)
def Configuration variantConfiguration = project.configurations.create("$variant.nameArchives")
project.artifacts.add(variantConfiguration.name, output.packageLibrary)
// Create one Upload type task for each configuration
def Upload variantTask = project.tasks.create("$variant.nameInstall", Upload)
variantTask.configuration = variantConfiguration
variantTask.repositories.mavenInstaller
pom.groupId = "com.yourcompany"
pom.artifactId = "yourLibrary"
pom.version = "1.0.0-$variant.name" //Give a different version for each variant
pom.packaging = "aar"
// Make all tasks depend on each other and on master task
masterTask.dependsOn variantTask
masterTask = variantTask
installArchives 任务会将所有变体发布到本地 Maven 存储库。
./gradlew installArchives
【讨论】:
不幸的是,没有为每个变体生成 pom.xml 文件。你知道怎么解决吗? @DmitryZaitsev 可能您没有为每个变体生成不同的配置。如果您使用相同的配置,它不会为所有变体生成一个 .pom。 您能否在回答中提供更多详细信息?我花了很长时间尝试谷歌搜索,但没有成功。 在这一行中: def Configuration variantConfiguration = project.configurations.create("$variant.nameArchives") 我正在为每个变体创建一个配置。确保你正在这样做。 如何为所有变体包含源 jar 和 javadoc jar?以上是关于Android 库 - 使用 Gradle 将多个变体发布到本地 Maven 存储库的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题
Android Studio gradle配置项 packagingOptions说明 Android打包so库重复问题
无法将 git 存储库解析为 android gradle 中的依赖项