2010-04-05 3 views
3

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

$ 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.

+0

отправьте источник на ваш мультитаст. java здесь как обновление вашего исходного вопроса –

ответ

6

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

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

com.google.common.core.*

com.google.common.annotations.*

com.google.common.collect.*

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


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

1

Вы обычно получаете пакет 3 участника как файл JAR (Java архив), а затем add it to your classpath during compilation and while executing the Java process.

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

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

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

1

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

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

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

Смежные вопросы