gpt4 book ai didi

android - Gradle 多项目 android 库设置与 maven 本地

转载 作者:太空狗 更新时间:2023-10-29 13:19:02 25 4
gpt4 key购买 nike

我正在尝试建立一个新项目,其中包括两个 android 库项目 (aar)。我们称它们为 foobar

由于在撰写本文时这是全新的,我使用的是 Android Studio 1.2.2、Android Build Tools 1.1、Gradle Wrapper 2.2.1。

foo 依赖于 bar 并且为了让 Gradle 构建工作,我需要像这样从源中指定依赖关系:

dependencies {
compile project(':bar')
}

我至少需要将 foo 发布到本地 Maven 存储库,以便它可以被依赖于 foo 的单独应用程序项目 baz 获取baz 在一个完全独立的项目和 Gradle 构建中。

这是我通过使用 maven 插件并将以下内容添加到 foo 的 build.gradle 中实现的:

task uploadArchives(type: Upload) {
repositories.mavenInstaller {
configuration = configurations.getByName(Dependency.DEFAULT_CONFIGURATION)
pom.groupId = "com.example"
pom.artifactId = "foo"
pom.version = "0.0.2-SNAPSHOT"
}
}

并且像往常一样在 baz 构建中包含 Maven 依赖项:

dependencies {
compile 'com.example:foo:+'
}

现在我遇到的问题是 baz 应用程序在运行时失败,因为它缺少 bar 的依赖项! (ClassNotFoundException)。检查发布到 Maven 本地的 foo aar 我可以看到它没有任何 bar 也没有barfoopom 中引用。

如何根据上述信息让 Gradle 在 pom 中包含 foo 的正确依赖信息?

我尝试通过将 bar 指定为 Maven 依赖项来更改 foo 的构建:

dependencies {
compile 'com.example:bar:+'
}

但在这种情况下,barfoo 的 Gradle 构建都在配置阶段失败,因为当然找不到 bar在本地 Maven 上(它还没有被构建!)——记住它们都在一个多项目设置中。

解决这个问题的正确方法是什么?对于像这样的多项目和 Android 库项目设置,是否有任何关于良好实践的指示?

我也对 mavenmaven-publishing 插件的存在感到困惑。什么是最适合用于 Android 库设置的标准?

我很抱歉在一个帖子中包含多个问题,我希望当我清楚地了解正确的方向时,我可以编辑它并使它成为一个更有用的问题/答案,可以帮助像我一样迷路的其他人。

谢谢!

最佳答案

好吧,经过大量的斗争,但仍然没有完全掌握细节,我想我找到了一些关于这个问题的线索。

据我所知,将 bar 指定为 foo 的源项目依赖项是正确的做法。理论上,如果一切设置正确,maven 插件应该能够在 pom 文件中构建适当的依赖项。

我遇到的问题是正确配置 maven 发布。

到目前为止,我能够得出的结论是,使用 mavenInstaller 可以很容易地工作,但是 pom 的格式不正确(缺少依赖项)。另一方面,如果我使用 mavenDeployer,则会生成带有依赖项的 pom。我只花了更长的时间就让它开始工作,因为如果设置不当,它会失败并出现各种异常 - 我不知道为什么。

对我有用并希望能帮助其他人的一个组合是:

afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
}

我希望这能帮助其他迷失的灵魂,并有助于使这个问题更加清晰

关于android - Gradle 多项目 android 库设置与 maven 本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372661/

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