gpt4 book ai didi

带有 Gradle 的 POM 中缺少 Android 库依赖项

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:11 25 4
gpt4 key购买 nike

我正在使用 Gradle 构建一个 Android 库项目并将其作为 aar 部署到 Maven 存储库。

库有一些依赖,应该包含在POM中

使用 apply plugin: 'maven' 不存在 POM 文件,只有 Artifact

通过 apply plugin: 'maven-publish' 生成了一个 POM 文件,但它不包含任何依赖项

有什么想法吗?这只是不支持吗?

Gradle 2.2 和 Android Gradle 插件 1.1.0

第一种方法:

configurations {
archives {
extendsFrom configurations.default
}
}

afterEvaluate { project ->
uploadArchives {

configuration = configurations.archives

repositories {
mavenDeployer {
repository(url: "http://nexus-url") {
authentication(userName: nexusUsername, password: nexusPassword)

pom.groupId = 'com.example'
pom.version = '123-SNAPSHOT'
pom.artifactId = 'foo'
pom.packaging = 'aar'

pom.project {
artifactId = 'bar'
packaging 'aar'
description 'baz'
}
}
}
}

也尝试过不将其包装在 afterEvaluate

第二种方法:

publishing {
publications {
sdk(MavenPublication) {
groupId 'com.example'
artifactId 'foo'
version = "0.123-SNAPSHOT"
artifact("$buildDir/outputs/aar/app-sdk-debug.aar")
}
}
repositories {
maven {
url "http://nexus-url"
credentials {
username 'foo'
password 'bar'
}
}
}
}

更新

问题的根本原因是这个项目使用了flavors。如果没有口味,则在使用 apply plugin: 'maven'

时会正确生成 pom

最佳答案

这是最终对我有用的解决方案:

publishing {
publications {
sdk(MavenPublication) {
artifactId libName
artifact "${project.buildDir}/outputs/aar/${libName}-${project.version}.aar"

//The publication doesn't know about our dependencies, so we have to manually add them to the pom
pom.withXml {
// for dependencies and exclusions
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDepend‌​ency) { ModuleDependency dp ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version)

// for exclusions
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
}
}
}
}
}
}

repositories {
maven {
name 'myrepo'
url 'https://maven.foo.com'

credentials {
username mavenUsername
password mavenPassword
}
}
}
}

关于带有 Gradle 的 POM 中缺少 Android 库依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28827593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com