什么阻止我在Android应用程序中使用依赖项的依赖项?

时间:2015-02-23 16:06:44

标签: java android gradle

我有一个使用OkHttp的项目。 OkHttp有as one of its dependenciesGuava库。

我想在我的应用中使用Guava库。当我在我的build.gradle中包含OkHttp时,Android Studio会发现Guava中包含的类,并在我尝试使用它们时自动导入它们。我的代码编译得很好:

ListMultimap<Integer, Integer> result = ArrayListMultimap.create();

在运行时,应用程序崩溃:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.common.collect.ArrayListMultimap" on path: 
...     
Suppressed: java.lang.ClassNotFoundException: com.google.common.collect.ArrayListMultimap
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 18 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

通过将Guava明确添加到我的build.gradle

,可以轻松解决这个问题
compile 'com.google.guava:guava:15.0'

我想知道是什么阻止我在运行时访问它。我怀疑我理解为什么(因为库可能会改变它们的依赖关系,这应该对这些库的用户透明),但是如何实现呢?依赖项是否为其依赖项获取了自己的类加载器?这是Gradle构建系统中的限制吗?如果是这种情况,为什么Android Studio / IntelliJ允许我从中导入 - 它不能告诉我在运行时无法访问它吗?

0 个答案:

没有答案