【问题标题】:Android Library Project Dependencies and NoClassDefFoundAndroid 库项目依赖项和 NoClassDefFound
【发布时间】:2014-12-11 06:32:17
【问题描述】:

编辑:这个项目演示了行为:

https://github.com/NathanielWaggoner/AndroidExamples/tree/master/packing

有一个自述文件解释了你第一次构建它的时候。

我有一组使用 Gradle 和 AndroidStudio 构建的项目。我们会打电话给他们Lib1, SDK and APPLib1SDK 部署到我维护的私有 Sonotype 存储库中。

App 依赖于SDK - App 是一个普通的 android 项目

SDK 依赖于Lib1 - SDK 是一个重新打包为 Jar 的 Android 库项目

Lib1 依赖于一些 Android 的东西。 - Lib1是一个普通的android库项目,打包为aar。

当我运行gradle dependencies 时,在每个项目中我都会看到一些我没有预料到的事情。

Lib1 中,我看到了所有适当的依赖项,正如我所期望的那样(包括依赖项的依赖项)

SDK 中,我看到了所有相关的依赖项及其树,但 Lib1 除外。在 lib1 的情况下,我唯一看到的是 lib1,而不是它的任何依赖项。

APP 中,我看到了与SDK 依赖项非常相似的东西——我看到所有依赖项都是它们的树,除了SDK。对于SDK,我只看到SDK。我没有看到 Lib1 被列为依赖项(或 SDK 的任何其他依赖项)。

一切都很好——也就是说我可以编译和部署Lib1,并编译和部署SDK。我可以编译APP - 但是当它使用引用Lib1SDK 代码时,我在Lib1 类上得到noClassDefFound。

检查输出 jars 在 SDKLib1 的构建阶段创建的 Jars 中不包含任何库类,并且创建的 pom 不引用任何依赖项(来自 installArchives/uploadArchives 任务)。

我该如何解决这个问题?我不希望 SDK 的使用者必须直接在 Lib1 中编译才能找到这些类。

【问题讨论】:

  • 请发布您的build.gradle 文件的相关部分,尤其是您设置所有这些的dependencies 闭包。
  • 好的,三个都添加了。必须进行一些编辑以确保它们的互联网安全,希望它们仍然可以理解。
  • 如果我站在你的立场上,我会创建第二组唯一存在的项目,以尝试重现你试图在三个项目。我不知道您的build.gradle 文件中的所有额外内容是否可能会干扰问题。因此,我会在一组并行项目中去掉多余的东西,看看我是否可以为依赖项找出正确的东西,然后尝试将其应用于拥有所有项目的完整项目您的额外配置选项。
  • 是的,这就是我想我必须要做的。该 SDK 构建文件是遗留的,我也不确定它在做什么。
  • github.com/NathanielWaggoner/AndroidExamples/tree/master/… 这个项目是如何重现这种行为的最小案例。有一个读我的东西可能很有趣。感谢您查看此内容。

标签: android maven gradle


【解决方案1】:

这个话题:

http://forums.gradle.org/gradle/topics/using_the_maven_publish_plugin_no_dependencies_in_pom_xml

显示了一些与我发生的事情极为相似的行为——我的 pom 是在不包含它们的依赖信息的情况下生成的。

现在我已经在我的 installArchives 中解决了这个问题。`

task installArchives(type: Upload) {
        repositories.mavenInstaller {
            configuration = configurations.archives
            //configuration = configurations.default
            pom.version = "0.0.1-SNAPSHOT"
            pom.artifactId = "lib2"
            pom.groupId = "waggoner.android.examples"
            pom.withXml {
                def node = asNode().appendNode('dependencies').appendNode('dependency')
                node.appendNode('groupId','waggoner.android.examples')
                node.appendNode('artifactId','lib1')
                node.appendNode('version','0.0.1-SNAPSHOT')
            }
        }
    }

【讨论】:

  • 请注意 - 这似乎是 maven 插件和 android 插件的问题。如果您使用 java 插件而不是 android,则 pom 会正确生成(我相信)。
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多