Java:如何使用第三方库?

时间:2010-04-05 16:39:14

标签: java guava

代码显示使用-cp触发器进行编译但未运行。显然,它无法找到HashMultimap。类路径问题?

$ javac -cp google-collect-1.0.jar  MultiThing.java 
$ java -cp google-collect-1.0.jar MultiThing 
Exception in thread "main" java.lang.NoClassDefFoundError: MultiThing
Caused by: java.lang.ClassNotFoundException: MultiThing
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
Could not find the main class: MultiThing. Program will exit.
$ cat MultiThing.java 
import java.io.*;
import java.util.*;
import com.google.common.annotations.*;
import com.google.common.collect.*;

public class MultiThing {
    public static void main(String[] args) {
        Multimap<String, String> wordToFiles = HashMultimap.create();
        wordToFiles.put("first", "HELLO");
        wordToFiles.put("first", "HALLO");
        for (String thing : wordToFiles.get("first")){
            System.out.println(thing);
        }
    }
}
$ ls
google-collect-1.0.jar  MultiThing.class   com     MultiThing.java

API for MultiMap.

3 个答案:

答案 0 :(得分:6)

就导入和编译而言,Java中的包不是分层相关的 - 例如,您无法通过导入com.google.collections.*来导入com.*

您提到的馆藏库中的包是:

com.google.common.core.*

com.google.common.annotations.*

com.google.common.collect.*

尝试明确导入这些包。如果你使用像Eclipse这样的IDE,它可以为你整理所有的import语句。


回应更新: -cp覆盖您的类路径。您需要包含当前目录以保留您在类路径上编写的类,因此假设您在类的目录中运行,请按以下方式设置类路径java -cp .:google-collect-1.0.jar MultiThing

答案 1 :(得分:1)

您通常将第三方软件包作为jar文件(java存档),然后add it to your classpath during compilation and while executing the Java process

在Unix和Windows中,执行此操作的语法略有不同。如果您使用像Eclipse这样的IDE,可以通过不同的方式将jar添加到构建中。

如果您使用的是Google系列,那么您下载的zip文件中应该有一个jar。像google-collect * .jar

之类的东西

更新:看起来OP修改了问题

答案 2 :(得分:1)

除了有关将JAR添加到类路径的内容之外:我还没有使用过Google Collections,但我非常怀疑他们将他们的类放在名为com的包中。

您应该知道,对于嵌套包,import level1.*不会导入包level1.level2中的任何类。

因此,对于您的示例,您需要将import com.*更改为import com.google-collections.whateverpackageyouneed.*。根据Google Collections API进行修改。