谷歌Guava库:java.lang.NoClassDefFoundError - com.google.common.collect.HashBiMap

8

我目前面临的问题是使用从这里下载的guava库时出现了java.lang.NoClassDefFoundError: com.google.common.collect.HashBiMap:

http://code.google.com/p/guava-libraries/

我已经将guava-12.0.jar作为参考库添加到我的项目中,但仍然出现错误。您能否给一些关于问题原因的建议?感谢您的帮助。

package my.project;

import android.app.Activity;
import android.os.Bundle;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

public class MainActivity extends Activity{

     private BiMap<String,String>  bidiMap; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
          setContentView(R.layout.bible_help_cal);

        bidiMap = HashBiMap.create();           
        bidiMap.put("a","100");
        bidiMap.put("b","200");


    }


}

我收到的错误信息

05-29 18:35:19.737: E/AndroidRuntime(376): FATAL EXCEPTION: main
05-29 18:35:19.737: E/AndroidRuntime(376): java.lang.NoClassDefFoundError: com.google.common.collect.HashBiMap
05-29 18:35:19.737: E/AndroidRuntime(376):  at my.project.MainActivity.onCreate(MainActivity.java:18)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1712)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.access$1500(ActivityThread.java:122)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.os.Looper.loop(Looper.java:132)
05-29 18:35:19.737: E/AndroidRuntime(376):  at android.app.ActivityThread.main(ActivityThread.java:4025)
05-29 18:35:19.737: E/AndroidRuntime(376):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 18:35:19.737: E/AndroidRuntime(376):  at java.lang.reflect.Method.invoke(Method.java:491)
05-29 18:35:19.737: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-29 18:35:19.737: E/AndroidRuntime(376):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-29 18:35:19.737: E/AndroidRuntime(376):  at dalvik.system.NativeStart.main(Native Method)
5个回答

12
这个错误意味着在编译时该类已经存在,但是在运行时无法找到。这通常发生在编译时的类路径与运行时的类路径不同步时。
很可能您的运行时类路径中没有包含guava jar。为了验证这一点,请尝试在代码中打印出classpath
在命令行上,您可以使用以下命令:java -cp "path/to/guava.jar" MyMainClass
或者,您可以将CLASSPATH环境变量设置为包括这个jar文件。

谢谢您的快速回复。那么我该如何将guava jar放入我的运行时类路径中呢? - Eric
一个Android项目,在Eclipse中。 - Eric
检查你的“运行配置”。确保包含了Guava jar。如果你是使用Eclipse构建的,它应该已经被包含了,但也许由于某些原因它没有被包含。 - Paul Sanwald
谢谢你的想法。我通过将jar文件复制到lib文件夹中解决了问题,现在问题已经消失了。 - Eric

5

我曾尝试使用支持sourceCompatibility JavaVersion.VERSION_1_8 的Guava 21和22版本,这导致在SDK版本低于24的设备上出现错误。解决方法是使用仍支持Java 7的Guava版本,该版本已经针对Android进行了后移。

dependencies {
  compile 'com.google.guava:guava:23.3-android'
}

2

在我的情况下,我的库中既有guava又有google-collection。 google-collection库与guava库发生了冲突。 如果你同时拥有guava和google-collection,请尝试删除google-collection以重新构建。


1

只需从这里 Guava 下载 Guava 库。

清理并构建。对我而言有效。 希望能有所帮助。干杯!


0
在我的情况下,我尝试使用选项添加外部JAR...添加guava-17.0.jar,这就是问题所在。当我将guava-17.0.jar移动到我的项目文件夹(Libs文件夹下)时,问题就解决了。
当然,我删除了外部JAR并再次使用添加JAR...选项添加它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接