【发布时间】:2014-12-11 06:32:17
【问题描述】:
编辑:这个项目演示了行为:
https://github.com/NathanielWaggoner/AndroidExamples/tree/master/packing
有一个自述文件解释了你第一次构建它的时候。
我有一组使用 Gradle 和 AndroidStudio 构建的项目。我们会打电话给他们Lib1, SDK and APP。 Lib1 和 SDK 部署到我维护的私有 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 - 但是当它使用引用Lib1 的SDK 代码时,我在Lib1 类上得到noClassDefFound。
检查输出 jars 在 SDK 或 Lib1 的构建阶段创建的 Jars 中不包含任何库类,并且创建的 pom 不引用任何依赖项(来自 installArchives/uploadArchives 任务)。
我该如何解决这个问题?我不希望 SDK 的使用者必须直接在 Lib1 中编译才能找到这些类。
【问题讨论】:
-
请发布您的
build.gradle文件的相关部分,尤其是您设置所有这些的dependencies闭包。 -
好的,三个都添加了。必须进行一些编辑以确保它们的互联网安全,希望它们仍然可以理解。
-
如果我站在你的立场上,我会创建第二组唯一存在的项目,以尝试重现你试图在三个项目。我不知道您的
build.gradle文件中的所有额外内容是否可能会干扰问题。因此,我会在一组并行项目中去掉多余的东西,看看我是否可以为依赖项找出正确的东西,然后尝试将其应用于拥有所有项目的完整项目您的额外配置选项。 -
是的,这就是我想我必须要做的。该 SDK 构建文件是遗留的,我也不确定它在做什么。
-
github.com/NathanielWaggoner/AndroidExamples/tree/master/… 这个项目是如何重现这种行为的最小案例。有一个读我的东西可能很有趣。感谢您查看此内容。