当前位置: 首页 > 知识库问答 >
问题:

Gradle的POM中缺少Android库依赖项

汪信鸥
2023-03-14

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

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

apply plugin:'maven'中没有POM文件,只有工件

使用apply plugin:'maven-publish'会生成POM文件,但它不包含任何依赖项

有什么想法吗?难道这就是不支持吗?

Gradle2.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'
            }
        }
    }
}

我也尝试了它,但没有将其包装在afterevalue

第二种方法:

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'
            }
        }
    }
}

更新

问题的根本原因是这个项目使用了口味。使用apply plugin:'maven'时,在没有味道的情况下可以正确生成pom

共有2个答案

公西培
2023-03-14

试用MavenDeployer:http://gradle.org/docs/current/userguide/mavenplugin.html

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
            pom.version = '1.0Maven'
            pom.artifactId = 'myMavenName'
        }
    }
}

您可以在这里设置pom详细信息。您将获得一个名为uploadarchives的新目标。当执行时,它将部署到给定的回购。

谢运良
2023-03-14

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

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 7,并且遇到了缺失的可传递依赖项。我试着改变我的身材。gradle文件在依赖项中使用“api”,但这并没有修复它。 projectA依赖于projectB,projectB依赖于projectC。 projectA-build。格拉德尔 projectB-构建。格拉德尔 ProjectA编译良好,但有运行时错误-从project ectC获取类的ClassNot

  • 我有一个图书馆项目。我想使用Android的新构建系统。目前我遇到了一个相当烦人的情况。 我在上定义了依赖项,但它们从未出现在Android Studio的外部库中。因此,对这些库的所有引用都被标记为错误。 更新 这个问题似乎在最新的Android Studio版本(0.2.5)上得到了修复

  • 在我的反应/redux应用程序中,我使用调度来调用每次安装组件时从redux中的状态检索数据的操作。问题正在使用状态发生我的方式不工作 下面是我得到的错误: React Hook useEffect缺少依赖项:“dispatch”。包括它或删除依赖项数组。像“getInvoiceData”这样的外部作用域值不是有效的依赖项,因为对它们进行变异不会重新呈现组件react HOOK/DEP 这是我的密

  • 我在Android Studio中有一个多模块设置,它由一个用于与API通信的纯java模块和一个使用该API模块的Android项目组成。要配置用户名和密码等API变量,我使用所有者(http://owner.aeonbits.org/)。整个构建没有问题。 我在 API 模块中使用了一个 Main-函数来测试事情是否运行良好,他们确实如此。我的问题是,当我尝试在 APi 模块上使用编译依赖项运

  • 工具链: > Build#AI-171.4041253,构建于2017年5月24日JRE: 1.8。0_112-发布-b736x86_64JVM: OpenJDK 64位服务器VM by JetBrains s. r. o Mac OS X 10.12.5 Google SDK/工具:我下载了最新的“all”(Android O、工具、库等,至少根据Android Studio SDK管理器)。

  • 在我的项目中,一切都很完美,但我明白这一点。 所以我应该在我的gradle文件中添加google-service。 这些是我的依赖。 基本上,我使用GoogleAppClient对象来获取我的当前位置。我与地图或GCM无关。 有没有办法解决这个问题?我环顾四周,但还是有问题。 谢谢。