Android库项目依赖项和NoClassDefFound

时间:2014-12-10 17:42:01

标签: android maven gradle

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

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 Stuff。 - Lib1是一个普通的android库项目,打包为aar。

当我运行gradle dependencies时,在每个项目中,我都会看到一些我不期待的事情。

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

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

APP中,我看到SDK依赖项非常类似的东西 - 我看到所有依赖项都是它们的树,除了SDK。在SDK的情况下,我只看到SDK。我没有看到Lib1被列为依赖项(或SDK的任何其他依赖项)。

一切都很好 - 我可以编译和部署Lib1,并编译和部署SDK。我可以编译APP - 但是当它使用引用SDK的{​​{1}}代码时,我会在Lib1类上获得noClassDefFound。

检查输出jar在Lib1SDK的构建阶段创建的JAR中没有包含任何库类,并且创建的poms不引用任何依赖项(来自installArchives) / uploadArchives任务)。

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

1 个答案:

答案 0 :(得分:1)

本主题:

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

显示了一些非常类似于我发现的行为 - 我的poms是在没有包含依赖信息的情况下生成的。

现在我已经在我的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')
            }
        }
    }