[英]error: package com.google.common.base does not exist
在java中给出以下代码,编译时你有很多错误:
Main.java:1: 错误:包 com.google.common.base 不存在 import com.google.common.base.Preconditions; ^
Main.java:2: 错误:包 com.google.common.collect 不存在 import com.google.common.collect.Lists; ^
Main.java:3: 错误:包 org.ros.exception 不存在 import org.ros.exception.RosRuntimeException; ^
Main.java:4: 错误:包 org.ros.internal.loader 不存在 import org.ros.internal.loader.CommandLineLoader; ^
Main.java:5: 错误:包 org.ros.node 不存在 import org.ros.node.DefaultNodeMainExecutor; ^
Main.java:6: 错误:包 org.ros.node 不存在 import org.ros.node.NodeConfiguration; ^
Main.java:7: 错误:包 org.ros.node 不存在 import org.ros.node.NodeMainExecutor;
我通过 IntelliJ 运行它。 有谁知道为什么它不起作用?
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>
通过在 pom.xml 中添加依赖项,我能够解决问题
将此依赖项添加到您的 Gradle 文件中
compile "com.google.guava:guava:16+"
任何有类似问题的人,这是一个依赖问题。
在 IntelliJ 中:
pom.xml
文件。Code | Generate on the main menu
Code | Generate on the main menu
,或按Alt+Insert
,然后从生成弹出窗口中选择依赖项。那应该可以解决这个问题。
你使用任何东西作为依赖管理器吗? 如果你使用像 maven 这样的东西,它会负责获取实际的 jars 并将它们放在你的类路径中。
有很多方法可以向您的类路径添加内容,但基本上以一种或另一种方式必须获取包含您要导入的类的 jar 并在编译时引用它们。 否则您的本地环境无法知道您正在导入什么。
这与您可以在没有任何外国罐子的情况下导入的东西不同。 java.util.*;
等包java.util.*;
附带您使用的 jdk,这就是为什么您可以导入它们并进行编译而无需任何进一步工作。
曾经作为本机 Intellij 模块而不是 Maven 模块创建的模块存在此问题。
我从项目中删除了模块并重新导入为 Maven 模块,因此它根据 pom.xml 在内部解析了所有库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.