【问题标题】:Publish Android library with external dependencies发布具有外部依赖项的 Android 库
【发布时间】:2016-11-15 18:49:37
【问题描述】:

我有一个 Android 闭源模块,将在其他项目中用作库。它包含外部依赖项。

为了发布它,我正在使用以下 gradle 任务创建一个 Maven 工件:


apply plugin: 'maven'

def coreAarFile = file('...build\\outputs\\aar\\android-sdk-release.aar')

artifacts {
    archives coreAarFile
}

uploadArchives {
    repositories.mavenDeployer {
        repository(url: "file://.\\mvn-repo")
        pom.project {
            groupId 'a.blabla'
            artifactId 'blabla-sdk'
            version "1.0.0"
        }
    }
}

它可以毫无问题地生成 .aar 文件、pom.xml 等。

然后我创建一个项目,该项目对我声明的库具有依赖关系。它一直工作到需要访问外部依赖项,然后抛出类未找到异常。

如何编辑我的 gradle 任务以包含外部依赖项或至少引用它们?它们发布在 mvnrepository.com 和 github.com。

【问题讨论】:

  • 通常,您的依赖项的工件 ID 会自动添加到 POM 中。您可能需要检查与 AAR 一起部署的 POM,并查看其中是否标识了依赖项。
  • 我希望我的 POM 将包含 元素的列表。不幸的是,它没有。
  • 哦,等等。为什么uploadArchives 不在真正的build.gradle 文件中,您实际上是在其中构建工件?您的脚本似乎只是试图发布一个裸 AAR。依赖信息通常在真正的 build.gradle 文件中,如果您的 uploadArchives 是该脚本的一部分,则该文件将包含在内。
  • uploadArchives 在我的项目(根目录)的 build.gradle 中。应该在模块的build.gradle中吗?
  • 是的。例如,请参阅this one from one of my libraries

标签: java android maven aar


【解决方案1】:

我将 uploadArchives 移至模块的 build.gradle 并删除了 artifacts 元素。有效!

感谢CommonsWare 指出正确的方向。

【讨论】:

  • 嗨 CommonsWare。当我发现这个似乎是匹配的时,我正要问一个新问题。我(最终)将一个库发布到 S3 maven 存储库,但是当我尝试使用它时,它给出了致命错误“没有找到类 io.reactivex.subjects.BehaviorSubject”。不同之处在于我已经在库模块的 build.gradle 文件中指定了 io.reactivex.rxjava2:rxandroid 和 io.reactivex.rxjava2:rxjava 的依赖项。知道为什么我仍然会收到此错误吗? (我应该问一个关于这个的新问题吗?)
猜你喜欢
  • 2014-03-04
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多