étant donné le code suivant en Java, lors de sa compilation, vous avez beaucoup d'erreurs:
Main.Java:1: erreur: le package com.google.common.base n'existe pas import com.google.common.base.Preconditions; ^
Main.Java:2: erreur: le package com.google.common.collect n'existe pas import com.google.common.collect.Lists; ^
Main.Java:3: erreur: le package org.ros.exception n'existe pas import org.ros.exception.RosRuntimeException; ^
Main.Java:4: erreur: le package org.ros.internal.loader n'existe pas import org.ros.internal.loader.CommandLineLoader; ^
Main.Java:5: erreur: le package org.ros.node n'existe pas import org.ros.node.DefaultNodeMainExecutor; ^
Main.Java:6: erreur: le package org.ros.node n'existe pas import org.ros.node.NodeConfiguration; ^
Main.Java:7: erreur: le package org.ros.node n'existe pas import org.ros.node.NodeMainExecutor;
Je l'exécute via IntelliJ. Est-ce que quelqu'un sait pourquoi cela ne fonctionne pas?
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);
}
}
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>11.0.2</version>
</dependency>
en ajoutant une dépendance dans pom.xml j'ai pu résoudre le problème
Ajoutez cette dépendance à votre fichier Gradle
compile "com.google.guava:guava:16+"
Toute personne ayant des problèmes similaires, c'est un problème de dépendance.
Dans IntelliJ:
pom.xml
fichier.Code | Generate on the main menu
, ou appuyez sur Alt+Insert
, puis choisissez Dépendance dans la fenêtre contextuelle Générer.Cela devrait résoudre ce problème.
Utilisez-vous quelque chose en tant que gestionnaire de dépendances? Si vous utilisez quelque chose comme maven, il se chargera d'obtenir les pots réels et de les mettre dans votre chemin de classe.
Il existe de nombreuses façons d'ajouter des éléments à votre chemin de classe, mais fondamentalement, d'une manière ou d'une autre, quelque chose doit obtenir les fichiers JAR qui contiennent les classes que vous souhaitez importer et les référencer lors de la compilation. Sinon, votre environnement local n'a aucun moyen de savoir ce que vous importez.
C'est différent des choses que vous pouvez importer sans aucun bocal étranger. Des packages tels que Java.util.*;
fourni avec le jdk que vous utilisez, c'est pourquoi vous pouvez les importer et les compiler sans autre travail.