Java Maven项目已编译,但工作区中缺少导入

Java Maven项目已编译,但工作区中缺少导入,java,eclipse,maven,dependencies,m2e,Java,Eclipse,Maven,Dependencies,M2e,我正在使用带有m2e插件的EclipseKepler,我想修改一个maven项目并编译它。我首先使用Configure->Convert to maven project将其转换为一个maven项目,但仍然有许多缺少的导入。当我使用运行为…->Maven安装项目编译 如何修复丢失的导入?告诉m2e更新项目:项目的上下文菜单/Maven/update project 然后,m2e将再次读取POM,更新类路径并再次构建项目 确保您的.classpath文件中有以下内容: <classpathe

我正在使用带有m2e插件的EclipseKepler,我想修改一个maven项目并编译它。我首先使用
Configure->Convert to maven project
将其转换为一个maven项目,但仍然有许多缺少的导入。当我使用
运行为…->Maven安装
项目编译


如何修复丢失的导入?

告诉m2e更新项目:项目的上下文菜单/Maven/update project

然后,m2e将再次读取POM,更新类路径并再次构建项目

确保您的
.classpath
文件中有以下内容:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes>
</classpathentry>

注意:根据您使用的m2e版本,实际语法可能略有不同

另一个常见的陷阱是提供的范围

已提供

这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为Java Enterprise Edition构建web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,并且不可传递

注意最后一部分:
不可传递

这意味着您依赖于POM A,它说“我需要X:Y:Z,提供的范围”。您的项目将看到此依赖项,但它根本不在类路径上


若要解决此问题,请将依赖项复制到具有相同作用域的项目中(
提供的
)。

在POM中使用哪些作用域?在哪里可以看到这些作用域?运行
mvn帮助:有效的POM
并搜索
。不要忘记命令行上的引号,否则
会导致问题。Aaron Digulla:每个依赖项都有
compile
您在项目中的“Maven依赖项”下看到依赖项了吗?