2015-04-14 11 views
7

den folgenden Code in Java gegeben, wenn es Kompilieren u eine Menge Fehler haben:Fehler: Paket com.google.common.base existiert nicht


Main.java:1: error: package com.google.common.base does not exist import com.google.common.base.Preconditions; ^

Main.java:2: error: package com.google.common.collect does not exist import com.google.common.collect.Lists; ^

Main.java:3: error: package org.ros.exception does not exist import org.ros.exception.RosRuntimeException; ^

Main.java:4: error: package org.ros.internal.loader does not exist import org.ros.internal.loader.CommandLineLoader; ^

Main.java:5: error: package org.ros.node does not exist import org.ros.node.DefaultNodeMainExecutor; ^

Main.java:6: error: package org.ros.node does not exist import org.ros.node.NodeConfiguration; ^

Main.java:7: error: package org.ros.node does not exist import org.ros.node.NodeMainExecutor;

ich es über IntelliJ laufen. Weiß jemand, warum es nicht funktioniert?

import com.google.common.base.Preconditions; 
import com.google.common.collect.Lists; 
import org.ros.exception.RosRuntimeException; 
import org.ros.internal.loader.CommandLineLoader; 
import org.ros.node.DefaultNodeMainExecutor; 
import org.ros.node.NodeConfiguration; 
import org.ros.node.NodeMainExecutor; 

// This class will run a publisher and subscriber, and relay data between them. 

public class Main { 

static private Talker pubNodeMain; 

static private Listener subNodeMain; 

public static void main(String[] argv) throws Exception { 
    // Set up the executor for both of the nodes 
    NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault(); 

    // Load the publisher 
    String[] pubArgv = {"Talker"}; 
    CommandLineLoader pubLoader = new CommandLineLoader(Lists.newArrayList(pubArgv)); 
    String nodeClassName = pubLoader.getNodeClassName(); 
    System.out.println("Loading node class: " + pubLoader.getNodeClassName()); 
    NodeConfiguration pubNodeConfiguration = pubLoader.build(); 

    try { 
     pubNodeMain = (Talker) pubLoader.loadClass(nodeClassName); 
    } catch (ClassNotFoundException e) { 
     throw new RosRuntimeException("Unable to locate node: " + nodeClassName, e); 
    } catch (InstantiationException e) { 
     throw new RosRuntimeException("Unable to instantiate node: " + nodeClassName, e); 
    } catch (IllegalAccessException e) { 
     throw new RosRuntimeException("Unable to instantiate node: " + nodeClassName, e); 
    } 

    Preconditions.checkState(pubNodeMain != null); 
    nodeMainExecutor.execute(pubNodeMain, pubNodeConfiguration); 

    // Load the subscriber 
    String[] subArgv = {"Listener"}; 
    CommandLineLoader subLoader = new CommandLineLoader(Lists.newArrayList(subArgv)); 
    nodeClassName = subLoader.getNodeClassName(); 
    System.out.println("Loading node class: " + subLoader.getNodeClassName()); 
    NodeConfiguration subNodeConfiguration = subLoader.build(); 

    try { 
     subNodeMain = (Listener) subLoader.loadClass(nodeClassName); 
    } catch (ClassNotFoundException e) { 
     throw new RosRuntimeException("Unable to locate node: " + nodeClassName, e); 
    } catch (InstantiationException e) { 
     throw new RosRuntimeException("Unable to instantiate node: " + nodeClassName, e); 
    } catch (IllegalAccessException e) { 
     throw new RosRuntimeException("Unable to instantiate node: " + nodeClassName, e); 
    } 

    Preconditions.checkState(subNodeMain != null); 
    nodeMainExecutor.execute(subNodeMain, subNodeConfiguration); 
    } 

} 
+0

Sie wahrscheinlich die Pakete selbst, anstatt die Klassen unter diesen Paketen zu importieren versucht. Versuchen Sie zum Beispiel, 'static com.google.com.base.Preconditions. *' Für den ersten Fehler hinzuzufügen. – chesh

+0

Ad-Abhängigkeit zu Maven oder Gradle, dann "Gradlew Idee" oder "Maven sauberer Build" und in Intellij klicken Sie auf Datei -> Caches ungültig/Neustart –

Antwort

7
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>11.0.2</version> 
</dependency> 

von Abhängigkeit in pom.xml Zugabe ich in der Lage war, das Problem

1

Verwenden Sie irgendetwas als Dependency Manager? Wenn Sie etwas wie Maven verwenden, wird es darauf achten, die richtigen Gläser zu bekommen und sie in Ihren Klassenpfad zu legen.

Es gibt viele Möglichkeiten, Dinge zu Ihrem Klassenpfad hinzuzufügen, aber grundsätzlich muss auf die eine oder andere Weise die Dateien mit den zu importierenden Klassen abgerufen und während des Kompilierens darauf verwiesen werden. Oder Ihre lokale Umgebung hat keine Möglichkeit zu wissen, was Sie importieren.

Dies unterscheidet sich von Sachen, die Sie ohne fremde Gläser importieren können. Pakete wie java.util.*; kommen mit der jdk, die Sie verwenden, weshalb Sie sie importieren und ohne weitere Arbeit kompilieren können.

1

Anybody, die ähnlichen Probleme zu lösen, ist dies ein Abhängigkeitsproblem.

In IntelliJ:

  1. Öffnen Sie die Datei pom.xml.
  2. Wählen Sie Code | Generate on the main menu oder drücken Sie Alt+Insert, und wählen Sie Abhängigkeiten aus dem Popup-Fenster Generieren.

Das sollte dieses Problem beheben.

1

diese Abhängigkeit zu Ihrer gradle Datei hinzufügen

compile "com.google.guava:guava:16+" 
Verwandte Themen