Java: как использовать стороннюю библиотеку? - PullRequest
3 голосов
/ 05 апреля 2010

Код показывает компиляцию с триггером -cp, но не работает.По-видимому, он не может найти HashMultimap.Проблема с classpath?

$ 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 для MultiMap.

Ответы [ 3 ]

6 голосов
/ 05 апреля 2010

Пакеты в Java не имеют иерархической связи с точки зрения импорта и компиляции - например, вы не можете импортировать com.google.collections.*, импортируя com.*.

Пакеты в упомянутой вами библиотеке коллекций:

com.google.common.core.*

com.google.common.annotations.*

com.google.common.collect.*

Попробуйте импортировать эти пакеты явно. Если вы используете IDE, например Eclipse, он может отсортировать все ваши операторы импорта для вас.


В ответ на обновление: -cp переопределяет ваш путь к классам. Вам нужно будет включить текущий каталог, чтобы сохранить класс, который вы написали в classpath, поэтому, если вы работаете в каталоге с вашим классом, установите classpath следующим образом java -cp .:google-collect-1.0.jar MultiThing

1 голос
/ 05 апреля 2010

В дополнение к тому, что было сказано о добавлении JAR в ваш путь к классам: я не использовал Google Collections, но я очень сомневаюсь, что они поместили свои классы в пакет под названием com.

Вы должны знать, что для вложенных пакетов import level1.* не будет импортировать ни один из классов в пакете level1.level2.

Так что для вашего примера вам нужно изменить import com.* на import com.google-collections.whateverpackageyouneed.*. Изменить согласно API коллекций Google.

1 голос
/ 05 апреля 2010

Обычно вы получаете сторонний пакет в виде jar-файла (java-архив), а затем добавляете его в classpath во время компиляции и при выполнении процесса Java .

Синтаксис для этого немного отличается в Unix и в Windows. Если вы работаете с IDE, такой как Eclipse, есть разные способы добавить jar в сборку.

Если вы используете коллекции Google, в загруженном вами zip-файле должна быть банка. Что-то вроде google-collect * .jar

Обновление: похоже, ОП пересмотрел вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...